集合与IO流结合的练习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合与IO流结合的练习相关的知识,希望对你有一定的参考价值。
集合与IO流结合的练习
练习:
有五个学生,每个学生有3门课程:数学,语文,英语
从键盘输入以上数据(包括姓名,三门课成绩),
输入的格式:zhangsan, 30, 40, 40计算出总成绩,
并把学生的信息和计算出的总分数高低顺序存放在磁盘文件”stud.txt”中.
1.描述学生对象;
2.定义一个可操作学生对象的工具类;
思路:
1.通过获取键盘录入的一行数据,并将录入的信息封装成学生对象;
2.因为学生对象很多,且要对学生的总分排序,所以用TreeSet集合;
3.将集合中的信息写入到文件中;
1.import java.io.*;
2.import java.util.*;
3.class StudentInfoTest
4.{
5. public static void main(String[] args) throws IOException
6. {
7. Comparator<Student> comp = Collections.reverseOrder();//因为之前的排序是从小到大排,现在从大到小排,所以定义比较器
8. Set<Student> stus = StudentInfoTool.getStudent(comp);
9. StudentInfoTool.writeToFile(stus);
10. }
11.}
12.class Student implements Comparable<Student>
13.{
14. private String name;
15. private int ma,cn,en;
16. private int sum;
17.
18. Student(String name,int ma,int cn,int en)
19. {
20. this.name = name;
21. this.ma = ma;
22. this.cn = cn;
23. this.en = en;
24. sum = ma + cn + en;
25. }
26. public String getName()
27. {
28. return name;
29. }
30. public int getSum()
31. {
32. return sum;
33. }
34. public String toString()
35. {
36. return "student["+name+", "+ma+", "+cn+", "+en+",]";
37. }
38. public int compareTo(Student stu)
39. {
40. int num = new Integer(this.sum).compareTo(new Integer(stu.sum));
41. if (num==0)
42. {
43. return this.name.compareTo(stu.name);
44. }
45. return num;
46. }
47. public int hashCode()
48. {
49. return name.hashCode()+sum*39;
50. }
51. public boolean equals(Object obj)
52. {
53. if (!(obj instanceof Student))
54. {
55. throw new ClassCastException("传入类型不正确");
56. }
57. Student stu = (Student)obj;
58. return this.name.equals(stu.name) && this.sum==stu.sum;
59. }
60.}
61.class StudentInfoTool
62.{
63. public static Set<Student> getStudent() throws IOException
64. {
65. getStudent(null);
66. return null;
67. }
68. public static Set<Student> getStudent(Comparator<Student> comp) throws IOException
69. {
70. BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
71. String line = null;
72. Set<Student> stus = null;
73. if (comp==null)
74. {
75. stus = new TreeSet<Student>();
76. }
77. else
78. {
79. stus = new TreeSet<Student>(comp);
80. }
81. while ((line=bufr.readLine()) !=null)
82. {
83. if ("over".equals(line))
84. {
85. break;
86. }
87. String[] arr = line.split(",");
88. Student stu = new Student(arr[0],Integer.parseInt(arr[1]),
89. Integer.parseInt(arr[2]),
90. Integer.parseInt(arr[3]));
91. stus.add(stu);
92. }
93. bufr.close();
94. return stus;
95. }
96. public static void writeToFile(Set<Student> stus) throws IOException
97. {
98. BufferedWriter bufw = new BufferedWriter(new FileWriter("e:\\stu.txt"));
99. for (Student stu : stus)
100. {
101. bufw.write(stu.toString());
102. bufw.write(stu.getSum()+"");
103. bufw.newLine();
104. bufw.flush();
105. }
106. bufw.close();
107. }
108.
109.}
110.
111.
以上是关于集合与IO流结合的练习的主要内容,如果未能解决你的问题,请参考以下文章
JAVA IO流相关代码(Properties类的常见方法与应用)
JAVA IO流相关代码(Properties类的常见方法与应用)
JavaSE-19.1.1IO流练习案例-集合到文件(排序改进版)
java内存流:java.io.ByteArrayInputStreamjava.io.ByteArrayOutputStreamjava.io.CharArrayReaderjava.io(代码片段