练习题07File、Map

1、请使用Map集合存储自定义数据类型Car做键,对应的价格做值。并使用keySet和entrySet两种方式遍历Map集合。

package com.xxx;

public class Car {
    private String name;
    private int price;

    public Car() {
    }

    public Car(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}
package com.xxx;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Homework1 {
    public static void main(String[] args) {
        Car car = new Car("车", 100);
        Car car1 = new Car("车1", 200);
        Car car2 = new Car("车2", 300);

        HashMap<Car, Integer> hashMap = new HashMap<>();

        hashMap.put(car,car.getPrice());
        hashMap.put(car1,car1.getPrice());
        hashMap.put(car2,car2.getPrice());

//        TreeSet<Car> keySet = new TreeSet<>();
//        keySet.add(car);
//        keySet.add(car1);
//        keySet.add(car2);
//
//        for (int i = 0; i < keySet.size(); i++) {
//
//        }
        //获取所有键
        Set<Car> carSet = hashMap.keySet();
        for (Car c : carSet) {
            System.out.println(c + ":\t" + hashMap.get(c));
        }


        Iterator<Map.Entry<Car, Integer>> iterator = hashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<Car, Integer> next = iterator.next();
            System.out.println(next);
        }
    }
}

2、需求:
统计一个文件夹中每种文件的个数并打印
打印格式如下:
txt:3个
doc:4个
jpg:6个

package com.xxx;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class Homework2 {
    public static void main(String[] args) throws IOException {
        //新建一些文件
        new File("d:\\a\\b\\1.txt").createNewFile();
        new File("d:\\a\\b\\2.doc").createNewFile();
        new File("d:\\a\\b\\3.jpg").createNewFile();
        new File("d:\\a\\b\\4.jpg").createNewFile();
        new File("d:\\a\\b\\5.md").createNewFile();

        //获取一个文件夹所有文件
        String path = "d:\\a\\b";
        File file = new File(path);

        //给所有的后缀,文件类型设置一个hashMap
        //String是文件后缀名,Integer是文件数量
        HashMap<String, Integer> map = new HashMap<>();


        //遍历文件路径名数组
        //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
        for (File listFile : file.listFiles()) {
            String fileName = listFile.getName();
            if (fileName.contains(".")) {//如果文件名称包含"."
                //substring返回一个新的字符串,它是此字符串的一个子字符串。
                //lastIndexOf返回指定子字符串在此字符串中最右边出现处的索引。
                String fileSuffix = fileName.substring(fileName.lastIndexOf(".") + 1);
                if (!map.containsKey(fileSuffix)) {//如果文件后缀名第一次出现,给它次数设为1
                    map.put(fileSuffix,1);
                } else {
                    map.put(fileSuffix, map.get(fileSuffix) + 1);
                }
            }
        }
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}

3、斗地主

package com.xxx;

import java.util.*;

public class Pai {
    /**
     * 斗地主
     * @param args
     */
    public static void main(String[] args) {
        //1.生成牌
        //数组->表示花色
        //数组->表示点数
        String[] colors = {"♦","♣","♥","♠"};
        String[] nums = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

        //一个key对应一张牌,共54张
        HashMap<Integer, String> hashMap = new HashMap<>();

        //存放牌的索引的集合
        List<Integer> list = new ArrayList<>();

        //定义一个变量,记录牌的索引
        int index = 0;
        for (String num : nums) {
            for (String color : colors) {
                String pai = color + num;
                hashMap.put(index, pai);

                list.add(index);
                index++;
//                System.out.println(pai);//打印除大小王之外所有的牌
            }
        }
//        System.out.println(list);

        //大小王单独生成
        hashMap.put(53, "小王");
        list.add(53);
        hashMap.put(54, "大王");
        list.add(54);
//        System.out.println(list);

        //2.洗牌
        //把索引的顺序打乱
        Collections.shuffle(list);
//        System.out.println(list);
        //3.发牌
        //给3个人和底牌,每人发17张,底牌3张
        //set集合会排序,把牌整理好
        TreeSet<Integer> dushen = new TreeSet<>();
        TreeSet<Integer> duxia = new TreeSet<>();
        TreeSet<Integer> duwang = new TreeSet<>();
        TreeSet<Integer> dipai = new TreeSet<>();
        //依次发牌,就是依次发索引
        for (int i = 0; i < list.size(); i++) {//索引0~53,51,52,53发给底牌
            //先判断是否是底牌,不然底牌发不到
            if (i >= 51) {//最后三个索引发给底牌
                dipai.add(list.get(i));
            } else if (i % 3 == 0) {
                dushen.add(list.get(i));
            } else if (i % 3 == 1) {
                duxia.add(list.get(i));
            } else if (i % 3 == 2) {
                duwang.add(list.get(i));
            }
        }
        //打印3个人和底牌的牌的索引
//        System.out.println(dushen);
//        System.out.println(duxia);
//        System.out.println(duwang);
//        System.out.println(dipai);

        //4.调用看牌的方法
        lookPai("赌神", dushen, hashMap);
        lookPai("赌侠", duxia, hashMap);
        lookPai("赌王", duwang, hashMap);
        lookPai("底牌", dipai, hashMap);

    }

    //4.看牌
    //看name的牌,牌的索引,索引对应的牌的点数
    public static void lookPai(String name, TreeSet<Integer> treeSet, Map<Integer, String> map) {
        String s = name + ":";
        //遍历set集合
        for (Integer i : treeSet) {
            s += map.get(i) + "\t";
        }
        System.out.println(s);
    }
}

posted @ 2022-10-23 22:26  Rix里克斯  阅读(37)  评论(0)    收藏  举报