练习:【三国游戏文件信息读取分类、键盘录入学生信息写入文件、 GBK与UTF-8文件内容互相转换】

练习:【三国游戏文件信息读取分类、键盘录入学生信息写入文件、 GBK与UTF-8文件内容互相转换】

三国游戏文件信息读取分类

  • txt文件信息
    1	阿会喃      云南          男 	190	225	74
    2	伊籍	江陵	男	162	226	24
    3	尹赏	天水	男	194	260	44
    4	尹默	梓潼	男	183	239	15
    5	于禁	陈留	男	159	221	78
    6	卫瓘	晋阳	男	220	291	46
    7	袁胤	汝南	男	163	199	14
    8	袁熙	汝南	男	176	207	51
    9	阎行	长安	男	159	222	84
    .....
    .....
    470	樊氏	桂阳	女	176	215	22
    471	糜氏	下邳	女	176	208	6
    472	卞氏	许昌	女	160	230	24
    473	步练师	楚河	女	185	238	10
    474	刘氏	洛阳	女	164	205	8
    
  • 需求

    +武力值排名前三的值是多少
    +求武力值最高3人名字
    +统计各个地区的武将
    +统计各个年龄段的武将 比如:10~19岁,20~29岁,30~39岁 40~49岁 50~59岁 60岁以上
    +统计各个年龄段的武将男女比例
    +统计平均年龄
    +统计平均年龄最高的地区
    
  • 代码

    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.*;
    
    public class DuQu {
        public static void main(String[] args) {
            BufferedReader du = null;
            ArrayList<WuJiang> jiang = new ArrayList<>();
            tianJia(jiang);
            threeTj(jiang);
            TreeMap<String, Integer> part = partTJ(jiang);
            partAge(jiang, part);
            ageFenBuBiLi(jiang);
        }
    
        private static void tianJia(ArrayList<WuJiang> jiang) {
            BufferedReader du;
            try {
                 du = new BufferedReader(new FileReader("output.txt"));
                String hang = null;
                if (true) {
                    try {
                        while (((hang = du.readLine()) != null)) {
                            String[] s = hang.split("[\\s]+");
                            WuJiang wuJiang = new WuJiang();
                            wuJiang.setNum(Integer.parseInt(s[0]));
                            wuJiang.setName(s[1]);
                            wuJiang.setPart(s[2]);
                            wuJiang.setSex(s[3]);
                            wuJiang.setBirthday(Integer.parseInt(s[4]));
                            wuJiang.setDied(Integer.parseInt(s[5]));
                            wuJiang.setPower(Integer.parseInt(s[6]));
                            jiang.add(wuJiang);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
    
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        private static void threeTj(ArrayList<WuJiang> jiang) {
            //武力值排名前三人物:武力值及其名字
            TreeMap<Integer, String> three = new TreeMap<>(new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return o2 - o1;
                }
            });
            for (WuJiang j : jiang) {
                three.put(j.getPower(), j.getName());
            }
            Set<Map.Entry<Integer, String>> entries = three.entrySet();
            int c = 0;
            System.out.println("【武力值前三的人是:【姓名+武力值】】");
            System.out.print("【");
            for (Map.Entry<Integer, String> entry : entries) {
                System.out.print(entry.getValue() + ":" + entry.getKey() + " | ");
                c++;
                if (c == 3) {
                    break;
                }
            }
            System.out.print("】");
            System.out.println();
            System.out.println("=======================================================================================================================================");
        }
    
        private static TreeMap<String, Integer> partTJ(ArrayList<WuJiang> jiang) {
            //统计各个地区的武将
            TreeMap<String, Integer> part = new TreeMap<>();
            for (WuJiang j : jiang) {
                if (!part.containsKey(j.getPart())) {
                    int d = 1;
                    part.put(j.getPart(), d);
                } else {
                    int m = part.get(j.getPart());
                    part.put(j.getPart(), m + 1);
                }
            }
            Set<Map.Entry<String, Integer>> entries1 = part.entrySet();
            int m = 0;
            System.out.println("【武力地域分布统计的人是:【地区+人数】】");
            System.out.print("【");
            for (Map.Entry<String, Integer> partstr : entries1) {
                m = m + part.get(partstr.getKey());
                System.out.print(partstr.getKey() + ":" + part.get(partstr.getKey()) + " | ");
            }
            System.out.print("【总计统计人数为:" + m + "】");
            System.out.print("】");
            System.out.println();
            System.out.println("=======================================================================================================================================");
            return part;
        }
    
        private static void partAge(ArrayList<WuJiang> jiang, TreeMap<String, Integer> part) {
            //统计平均年龄及其平均年龄最高的地区
            TreeMap<String, Integer> old = new TreeMap<>();
            for (WuJiang j : jiang) {
                if (!old.containsKey(j.getPart())) {
                    old.put(j.getPart(), (j.getDied() - j.getBirthday()));
                } else {
                    int r = old.get(j.getPart());
                    old.put(j.getPart(), (r + j.getDied() - j.getBirthday()));
                }
            }
            Set<Map.Entry<String, Integer>> entr = old.entrySet();
            System.out.println("【地域平均年龄分布统计的人是:【地区+年龄】】");
            System.out.print("【");
            int max = 0;
            String pa = "";
            for (Map.Entry<String, Integer> par : entr) {
                int mm = part.get(par.getKey());
                if (max < (old.get(par.getKey()) / mm)) {
                    max = (old.get(par.getKey()) / mm);
                }
                System.out.print(par.getKey() + ":" + (old.get(par.getKey()) / mm) + " | ");
    
                if (old.get(par.getKey()) == max) {
                    pa = par.getKey();
                }
            }
            System.out.print("{平均年龄最高地区为:" + pa + "\t" + "最高平均年龄为:" + max + "}");
            System.out.print("】");
            System.out.println();
            System.out.println("=======================================================================================================================================");
        }
    
        private static void ageFenBuBiLi(ArrayList<WuJiang> jiang) {
            //统计各个年龄段的武将及各个年龄段的武将男女比例
            TreeMap<String, String> iix = new TreeMap<>();
            for (WuJiang wuJiang : jiang) {
                iix.put(wuJiang.getName(), wuJiang.getSex());
            }
            TreeMap<String, Integer> ii = new TreeMap<>();
            for (WuJiang wuJiang : jiang) {
                ii.put(wuJiang.getName(), wuJiang.getDied() - wuJiang.getBirthday());
            }
            int z1 = 0;
            int z2 = 0;
            int z3 = 0;
            int z4 = 0;
            int z5 = 0;
            int z6 = 0;
            int z7 = 0;
            int z8 = 0;
            int x1 = 0;
            int x2 = 0;
            int x3 = 0;
            int x4 = 0;
            int x5 = 0;
            int x6 = 0;
            int x7 = 0;
            int x8 = 0;
            int x9 = 0;
            int x77 = 0;
            int sum = 0;
            Set<Map.Entry<String, Integer>> iii = ii.entrySet();
            for (Map.Entry<String, Integer> nial : iii) {
                sum += nial.getValue();
                if (nial.getValue() >= 10 && nial.getValue() <= 19) {
                    z1++;
                    if (iix.get(nial.getKey()).equals("男")) {
                        z7++;
                    } else {
                        z8++;
                    }
                } else if (nial.getValue() >= 20 && nial.getValue() <= 29) {
                    z2++;
                    if (iix.get(nial.getKey()).equals("男")) {
                        x1++;
                    } else {
                        x2++;
                    }
                } else if (nial.getValue() >= 30 && nial.getValue() <= 39) {
                    z3++;
                    if (iix.get(nial.getKey()).equals("男")) {
                        x3++;
                    } else {
                        x4++;
                    }
                } else if (nial.getValue() >= 40 && nial.getValue() <= 49) {
                    z4++;
                    if (iix.get(nial.getKey()).equals("男")) {
                        x5++;
                    } else {
                        x6++;
                    }
                } else if (nial.getValue() >= 50 && nial.getValue() <= 59) {
                    z5++;
                    if (iix.get(nial.getKey()).equals("男")) {
                        x7++;
                    } else {
                        x8++;
                    }
                } else {
                    z6++;
                    if (iix.get(nial.getKey()).equals("男")) {
                        x9++;
                    } else {
                        x77++;
                    }
                }
            }
            System.out.println("【年龄统计:【年龄段+人数】】");
            System.out.println("【年龄为10-19的人数为:" + z1 + " | 其中男性武将有:" + z7 + "人 | 女性武将有:" + z8 + "人 | 男女比例为:" + z7 + ":" + z8 + "  】");
            System.out.println("【年龄为20-29的人数为:" + z2 + " | 其中男性武将有:" + x1 + "人 | 女性武将有:" + x2 + "人 | 男女比例为:" + x1 + ":" + x2 + "  】");
            System.out.println("【年龄为30-39的人数为:" + z3 + " | 其中男性武将有:" + x3 + "人 | 女性武将有:" + x4 + "人 | 男女比例为:" + x3 + ":" + x4 + "  】");
            System.out.println("【年龄为40-49的人数为:" + z4 + " | 其中男性武将有:" + x5 + "人 | 女性武将有:" + x6 + "人 | 男女比例为:" + x5 + ":" + x6 + "  】");
            System.out.println("【年龄为50-59的人数为:" + z5 + " | 其中男性武将有:" + x7 + "人 | 女性武将有:" + x8 + "人 | 男女比例为:" + x7 + ":" + x8 + "  】");
            System.out.println("【年龄大于60的人数为:" + z6 + " | 其中男性武将有:" + x9 + "人 | 女性武将有:" + x77 + "人 | 男女比例为:" + x9 + ":" + x77 + "  】");
            System.out.println("【平均年龄为:" + (sum / 474) + "】");
            System.out.println("=======================================================================================================================================");
        }
    }
    class WuJiang {
        private int num;
        private String name;
        private String part;
        private String sex;
        private  int birthday;
        private  int died;
        private int power;
    
        public WuJiang() {
        }
    
        public WuJiang(int num, String name, String part, String sex, int birthday, int died, int power) {
            this.num = num;
            this.name = name;
            this.part = part;
            this.sex = sex;
            this.birthday = birthday;
            this.died = died;
            this.power = power;
        }
    
        public void setNum(int num) {
            this.num = num;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setPart(String part) {
            this.part = part;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public void setBirthday(int birthday) {
            this.birthday = birthday;
        }
    
        public void setDied(int died) {
            this.died = died;
        }
    
        public void setPower(int power) {
            this.power = power;
        }
    
        public int getNum() {
            return num;
        }
    
        public String getName() {
            return name;
        }
    
        public String getPart() {
            return part;
        }
    
        public String getSex() {
            return sex;
        }
    
        public int getBirthday() {
            return birthday;
        }
    
        public int getDied() {
            return died;
        }
    
        public int getPower() {
            return power;
        }
    
        @Override
        public String toString() {
            return "WuJiang{" +
                    "num=" + num +
                    ", name='" + name + '\'' +
                    ", part='" + part + '\'' +
                    ", sex=" + sex +
                    ", birthday=" + birthday +
                    ", died=" + died +
                    ", power=" + power +
                    '}';
        }
    }
    
    
  • 运行结果

    【武力值前三的人是:【姓名+武力值】】
    【吕布:100 | 张飞:98 | 马超:97 | 】
    =======================================================================================================================================
    【武力地域分布统计的人是:【地区+人数】】
    【上庸:2 | 下邳:16 | 云南:17 | 会稽:8 | 北平:15 | 北海:5 | 南皮:13 | 吉林:1 | 吴:10 | 天水:17 | 宛:14 | 寿春:5 | 小沛:6 | 平原:5 | 庐江:13 | 建业:21 | 成都:21 | 新野:4 | 晋阳:15 | 柴桑:11 | 桂阳:6 | 梓潼:10 | 楚河:1 | 武陵:7 | 汉中:7 | 汝南:8 | 江夏:10 | 江州:12 | 江陵:17 | 洛阳:30 | 湖南:1 | 濮阳:20 | 蒙古:1 | 蓟:4 | 襄平:7 | 襄阳:16 | 西凉:4 | 许昌:19 | 邺:22 | 长安:14 | 长沙:6 | 陈留:26 | 零陵:7 | 【总计统计人数为:474】】
    =======================================================================================================================================
    【地域平均年龄分布统计的人是:【地区+年龄】】
    【上庸:64 | 下邳:46 | 云南:46 | 会稽:54 | 北平:43 | 北海:47 | 南皮:46 | 吉林:70 | 吴:47 | 天水:48 | 宛:46 | 寿春:55 | 小沛:45 | 平原:51 | 庐江:50 | 建业:51 | 成都:58 | 新野:49 | 晋阳:46 | 柴桑:51 | 桂阳:46 | 梓潼:54 | 楚河:53 | 武陵:57 | 汉中:52 | 汝南:44 | 江夏:52 | 江州:52 | 江陵:46 | 洛阳:53 | 湖南:46 | 濮阳:47 | 蒙古:30 | 蓟:54 | 襄平:46 | 襄阳:51 | 西凉:48 | 许昌:46 | 邺:51 | 长安:52 | 长沙:50 | 陈留:51 | 零陵:49 | {平均年龄最高地区为:吉林	最高平均年龄为:70}】
    =======================================================================================================================================
    【年龄统计:【年龄段+人数】】
    【年龄为10-19的人数为:2 | 其中男性武将有:2人 | 女性武将有:0人 | 男女比例为:2:0  】
    【年龄为20-29的人数为:11 | 其中男性武将有:9人 | 女性武将有:2人 | 男女比例为:9:2  】
    【年龄为30-39的人数为:104 | 其中男性武将有:95人 | 女性武将有:9人 | 男女比例为:95:9  】
    【年龄为40-49的人数为:136 | 其中男性武将有:129人 | 女性武将有:7人 | 男女比例为:129:7  】
    【年龄为50-59的人数为:97 | 其中男性武将有:89人 | 女性武将有:8人 | 男女比例为:89:8  】
    【年龄大于60的人数为:124 | 其中男性武将有:119人 | 女性武将有:5人 | 男女比例为:119:5  】
    【平均年龄为:50】
    =======================================================================================================================================
    
    Process finished with exit code 0
    

键盘录入学生信息写入文件

  • 问题

    键盘录入学生信息(姓名,语文成绩(chineseScore),数学成绩(mathScore),英语成绩(englishScore)),按照总分从高到低存入文本文件
    - 分析: 	
    - a: 创建一个学生类: 姓名,语文成绩(chineseScore),数学成绩(mathScore),英语成绩(englishScore)
    - b: 因为要排序,所以需要选择TreeSet进行存储学生对象
    - c: 键盘录入学生信息,把学生信息封装成一个学生对象,在把学生对象添加到集合中
    - d: 创建一个高效的字符输出流对象
    - e: 遍历集合,把学生的信息写入到指定的文本文件中
    - f: 释放资源
    
  • 代码

    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Comparator;
    import java.util.Scanner;
    import java.util.TreeSet;
    
    public class XueSheng {
        public static void main(String[] args) {
            TreeSet<Student> dd = new TreeSet<>(new Comparator<Student>() {
                @Override
                public int compare(Student o1, Student o2) {
                    double sum1 = o1.getChinese() + o1.getEnglish() + o1.getMath();
                    double sum2 = o2.getChinese() + o2.getEnglish() + o2.getMath();
                    return (int) (sum2 - sum1);
                }
            });
            BufferedWriter bb = null;
            try {
                bb = new BufferedWriter(new FileWriter("stud.txt"));
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            ShuRu(dd);
            System.out.println(dd);
            int i = 1;
            System.out.println("排名" + "\t" + "总分" + "\t\t" + "姓名" + "\t\t" + "语文" + "\t\t" + "数学" + "\t\t" + "英语");
            for (Student sss : dd) {
                System.out.print(i + "\t");
                String s = i + "\t" + (sss.getChinese() + sss.getEnglish() + sss.getMath()) + "\t\t" + sss.getName() + "\t" + sss.getChinese() + "\t" + sss.getMath() + "\t" + sss.getEnglish();
                i++;
                try {
                    assert bb != null;
                    bb.write(s);
                    bb.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                System.out.println(sss);
            }
            try {
                bb.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        private static void ShuRu(TreeSet<Student> dd) {
            int m = 1;
            while (m == 1) {
                Scanner ss = new Scanner(System.in);
                System.out.println("请输入学生姓名:");
                Student s = new Student();
                s.setName(ss.nextLine());
                System.out.println("请输入学生成绩:");
                System.out.print("语文:");
                s.setChinese(ss.nextDouble());
                System.out.print("数学:");
                s.setMath(ss.nextDouble());
                System.out.print("英语:");
                s.setEnglish(ss.nextDouble());
                System.out.println();
                dd.add(s);
                System.out.println("结束请输入0 继续请输入1");
                m = ss.nextInt();
    
            }
        }
    }
    
    class Student {
        private String name;
        private double chinese;
        private double math;
        private double English;
    
        public Student() {
        }
    
        public Student(String name, double chinese, double math, double english) {
            this.name = name;
            this.chinese = chinese;
            this.math = math;
            English = english;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public double getChinese() {
            return chinese;
        }
    
        public void setChinese(double chinese) {
            this.chinese = chinese;
        }
    
        public double getMath() {
            return math;
        }
    
        public void setMath(double math) {
            this.math = math;
        }
    
        public double getEnglish() {
            return English;
        }
    
        public void setEnglish(double english) {
            English = english;
        }
    
        @Override
        public String toString() {
            return (this.math + this.chinese + this.English) + "\t" +
                    name + "\t\t" +
                    chinese + "\t" +
                    math + "\t" +
                    English
                    ;
        }
    }
    
    
  • 程序运行结果

请输入学生姓名:
kk
请输入学生成绩:
语文:45
数学:45
英语:78

结束请输入0 继续请输入1
1
请输入学生姓名:
ll
请输入学生成绩:
语文:78
数学:89
英语:56

结束请输入0 继续请输入1
1
请输入学生姓名:
oo
请输入学生成绩:
语文:32
数学:12
英语:10

结束请输入0 继续请输入1
1
请输入学生姓名:
ji
请输入学生成绩:
语文:45
数学:12
英语:16

结束请输入0 继续请输入1
1
请输入学生姓名:
hu
请输入学生成绩:
语文:78
数学:95
英语:96

结束请输入0 继续请输入1
1
请输入学生姓名:
koi
请输入学生成绩:
语文:23
数学:13
英语:10

结束请输入0 继续请输入1
1
请输入学生姓名:
dr
请输入学生成绩:
语文:84
数学:86
英语:82

结束请输入0 继续请输入1
0
[269.0 hu 78.0 95.0 96.0, 252.0 dr 84.0 86.0 82.0, 223.0 ll 78.0 89.0 56.0, 168.0 kk 45.0 45.0 78.0, 73.0 ji 45.0 12.0 16.0, 54.0 oo 32.0 12.0 10.0, 46.0 koi 23.0 13.0 10.0]
1 269.0 hu 78.0 95.0 96.0
2 252.0 dr 84.0 86.0 82.0
3 223.0 ll 78.0 89.0 56.0
4 168.0 kk 45.0 45.0 78.0
5 73.0 ji 45.0 12.0 16.0
6 54.0 oo 32.0 12.0 10.0
7 46.0 koi 23.0 13.0 10.0

Process finished with exit code 0

请输入学生姓名:
gt
请输入学生成绩:
语文:78
数学:12
英语:46

结束请输入0 继续请输入1
1
请输入学生姓名:
hy
请输入学生成绩:
语文:89
数学:45
英语:65

结束请输入0 继续请输入1
1
请输入学生姓名:
we
请输入学生成绩:
语文:12
数学:45
英语:78

结束请输入0 继续请输入1
0
[199.0 hy 89.0 45.0 65.0, 136.0 gt 78.0 12.0 46.0, 135.0 we 12.0 45.0 78.0]
1 199.0 hy 89.0 45.0 65.0
2 136.0 gt 78.0 12.0 46.0
3 135.0 we 12.0 45.0 78.0

Process finished with exit code 0


+ TXT文件写入结果

排名 总分 姓名 语文 数学 英语
1 269.0 hu 78.0 95.0 96.0
2 252.0 dr 84.0 86.0 82.0
3 223.0 ll 78.0 89.0 56.0
4 168.0 kk 45.0 45.0 78.0
5 73.0 ji 45.0 12.0 16.0
6 54.0 oo 32.0 12.0 10.0
7 46.0 koi 23.0 13.0 10.0
排名 总分 姓名 语文 数学 英语
1 168.0 ff 45.0 45.0 78.0
排名 总分 姓名 语文 数学 英语
1 135.0 fd 78.0 45.0 12.0
排名 总分 姓名 语文 数学 英语
1 199.0 hy 89.0 45.0 65.0
2 136.0 gt 78.0 12.0 46.0
3 135.0 we 12.0 45.0 78.0


### 文件编码转换

+ 需求

给了一个文本文件是GBK编码。你把这个文件中的4句,复制到另外一个文本文件,这个文件的编码是UTF-8


+ 原文件内容

��ǰ���¹�
���ǵ���˪
��ͷ������
��ͷ˼����


+ 代码

import java.io.*;
import java.util.LinkedList;

public class Shi {
public static void main(String[] args) {
InputStreamReader du = null;
OutputStreamWriter xie = null;
BufferedReader du1 = null;
BufferedWriter xie1 = null;
try {
try {
du = new InputStreamReader(new FileInputStream(“shi.txt”), “GBK”);
xie = new OutputStreamWriter(new FileOutputStream(“sh.txt”), “UTF-8”);
int len = 0;
while ((len = du.read()) != -1) {
xie.write(len);
}
System.out.println(“转换成功”);
du.close();
xie.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

  }

}


+ 程序运行结果

转换成功

Process finished with exit code 0


+ 文件写入结果

床前明月光
疑是地上霜
举头望明月
低头思故乡


# over




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值