JavaExp11:范型与容器

1. 请设计一个顺序堆栈,(用数组来存储堆栈中的数据元素),实现堆栈的push, pop, 和top三个函数,在测试函数中生成堆栈对象并测试push, pop, 和top 三个函数(最少要测试Integer和String两种类型的对象).

package EXP2020.exp11;

import java.util.ArrayList;

/**
 * @author JM
 * @date 2020/5/19
 */

/**模拟一个顺序栈*/
class SeqStack {
    public ArrayList stack = new ArrayList();

    //获取栈顶元素
    public Object top() {
        //取栈顶元素相当于取LinkedList容器的头位置的元素
        return stack.get(stack.size() - 1);
    }

    //入栈
    public void push(Object obj) {
        stack.add(obj);
    }

    //出栈
    public void pop() {
        stack.remove(stack.size() - 1);
    }

    //重写toString
    public String toString() {
        return stack.toString();
    }

}
/**主类进行测试*/
public class MainTestOne {
    public static void main(String[] args) {
        //创建一个栈
        SeqStack stack = new SeqStack();
        Integer i = new Integer(12345);
        String str = new String("string");

        //测试push存放数据
        stack.push(str);
        stack.push(i);
        stack.push(456);
        stack.push("Jack");
        stack.push("Tom");
        System.out.println("移除数据之前:" + stack);

        //测试pop移除栈顶数据
        stack.pop();
        System.out.println("移除数据之后:" + stack);

        //获取栈顶元素
        Object topObj = stack.top();
        System.out.println("获得栈顶元素:" + topObj);
    }
}

在这里插入图片描述
2. 用HashSet模拟一个网上购物车。要求:从键盘输入5个商品的编号、名称、单价、购买数量,将这些信息存入一个HashSet,(如果编号相同,则可以在数量上加1,不能重复存入购物车)然后将该HashSet作为参数调用方法getSum(HashSet items),该方法用于计算商品的总价并返回。

package EXP2020.exp11;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author JM
 * @date 2020/5/19
 */

/**
 * 定义购物车类
 */
class ShoppingCart {
    //商品编号、名称、单价、购买数量
    public String id;
    public String name;
    public double price;
    public int num;

    //初始化构造函数
    public ShoppingCart(String id, String name, double price, int num) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.num = num;
    }

    //重写toString方法
    public String toString() {
        return "商品编号:" + id + " | 商品名称:" + name + " | 价格:" + price + "元/件 | 数量:" + num + "件";
    }

    //重写hashCode方法
    public int hashCode() {
        return id.hashCode();          // 返回id属性的哈希值
    }

    //重写equals
    public boolean equals(Object obj) {
        if (this == obj)               // 判断是否是同一个对象
            return true;                // 如果是,直接返回true

        if (!(obj instanceof ShoppingCart))
            return false;                // 如果对象不是Commodity类型,返回false
        ShoppingCart c = (ShoppingCart) obj;
        return this.id.equals(c.id);
    }
}

public class MainTestTwo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        HashSet storage = new HashSet();//定义一个容器存放购物信息
        int i = 5;//输入5个商品信息

        while (i > 0) {
            String id = sc.next();
            String name = sc.next();
            double price = sc.nextDouble();
            int num = sc.nextInt();
            ShoppingCart com = new ShoppingCart(id, name, price, num);
            if (!storage.add(com)) {    //如果有一样的
                storage.remove(com);
                com.num++;              //同样的商品数量加1
                storage.add(com);
            }
            i--;
        }

        //迭代器遍历输出购物信息
        System.out.printf("\n======================您的购物信息列表如下:==========================\n");
        Iterator it = storage.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        System.out.printf("需要消费总额: %.2f元\n", getSum(storage));
    }

    //计算总额并返回
    public static double getSum(HashSet items) {
        double moneySum = 0;
        String p;

        Iterator it = items.iterator();
        while (it.hasNext()) {
            p = it.next().toString();
            Pattern pattern1 = Pattern.compile("价格:\\d+.\\d+"); //匹配价格
            Pattern pattern2 = Pattern.compile("数量:(\\d+)");   //匹配数量
            Matcher m1 = pattern1.matcher(p);   //传入要匹配的原串
            Matcher m2 = pattern2.matcher(p);

            while (m1.find() && m2.find()) {
                double money = Double.parseDouble(m1.group().substring(3));
                int num = Integer.parseInt(m2.group().substring(3));
                moneySum += money * num; //计算商品总额
            }
        }
        return moneySum;
    }
}

不重复的情况:
在这里插入图片描述
重复的情况:
在这里插入图片描述
第二题好像方法很多。。。哎。。
3. 写一个彩票程序:30选7。然后从键盘输入7个数,然后随机(1~30之间)生成7个随机数,注意不能重复,对比7个数是否与随机数有相同的。最后显示“中了几个号”。同时,如果中了7个号,显示一等奖;如果中了6个号,显示二等奖;如果中了5个号,显示三等奖。要求:选用合适的容器和算法。(说明:键盘输入可以使用Scanner类)

package EXP2020.exp11;

import java.util.Scanner;
import java.util.TreeSet;

/**
 * @author JM
 * @date 2020/5/19
 */
public class MainTestThree {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        TreeSet ts = new TreeSet();//定义一个TreeSet容器存放数据
        int[] myNumbers = new int[7];
        int count = 0;

        //输入7个数
        System.out.println("请输入7个数:");
        for (int i = 0; i < myNumbers.length; i++) {
            myNumbers[i] = sc.nextInt();
        }

        //产生7个1~30之间的随机数,并放在容器里
        while (ts.size() < 7) {
            ts.add((int) (Math.ceil(Math.random() * 30)));
        }
        System.out.println("中奖号码有:" + ts);

        //显示结果
        for (int i = 0; i < 7; i++) {
            if (ts.contains(myNumbers[i]))
                count++;
        }
        switch (count) {
            case 5:
                System.out.println("恭喜获得三等奖");
                break;
            case 6:
                System.out.println("恭喜获得二等奖");
                break;
            case 7:
                System.out.println("恭喜获得一等奖");
                break;
            default:
                System.out.println("谢谢参与");
        }

        System.out.println("中了"+count+"个号");
    }
}

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值