|
楼主 |
发表于 2018-1-2 10:25:53
|
显示全部楼层
这道题后来在一本书上找到了相关的解法,不知道有没有跟我有同样的问题的朋友,在这里记录下。
- package io;
- //一个IO的完整实例1
- /*
- * 要求计算Java成绩的平均分数,打印输出不及格的学生名字以及
- * 按照Java成绩的排序输出清单(降序输出)
- * */
- public class Student implements java.io.Serializable,Comparable{
- private String id,name,email;
- private int java,age;
- private boolean gender;
- //构造方法1
- public Student(){
-
- }
- //构造方法2
- public Student(String id, String name, String email, int java, int age,
- boolean gender) {
- // super();
- this.id = id;
- this.name = name;
- this.email = email;
- this.java = java;
- this.age = age;
- this.gender = gender;
- }
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public int getJava() {
- return java;
- }
- public void setJava(int java) {
- this.java = java;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public boolean isGender() {
- return gender;
- }
- public void setGender(boolean gender) {
- this.gender = gender;
- }
-
-
- @Override
- public int hashCode() {//实现散列方法
- return id.hashCode();
- }
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if(obj instanceof Student){ //如果学号相等就认为对象相等
- return id.equals(((Student)obj).id);//并没有比较全部的属性数据
- }
- return false;
- }
- @Override
- public int compareTo(Object o) {//提供对象的比较方法
- Student s=(Student)o;
- return s.java-this.java;
- /*
- * 注意:不是this.java-s.java
- * 因为需要按照java成绩降序输出成绩单
- * */
- }
- public String toString(){
- return "Student{"+"id="+id+",name="+name+",email="+email+",java="
- +java+",age"+age+",gender="+gender+"}";
-
- }
- }
复制代码- package io;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.InputStreamReader;
- import java.lang.reflect.Array;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Collections;
- import java.util.StringTokenizer;
- //一个IO的完整实例2
- public class TextDataLoader {
- //从文本文件中加载数据,返回一个List集合
- public ArrayList<Student>load(){
- //创建一个空的集合
- ArrayList<Student>r=new ArrayList<Student>();
- try {
- //以字节流的形式读入
- /*
- * 因为是用字节流来写媒介,所以对应的是OutputStream
- *
- * */
- FileInputStream fis=new FileInputStream("d:/a.txt");
- //将字节流按照指定编码转换为字符流
- InputStreamReader isr=new InputStreamReader(fis,"GBK");
- //该类提供缓存字符流功能,同时将会过滤掉回车和换行符,提供行数据读入
- BufferedReader br=new BufferedReader(isr);
- String s="";
- while((s=br.readLine())!=null){
- s=s.trim();
- //如果行数据是空,则继续读下一行
- if(s.length()==0)continue;
- //字符串分割器类
- StringTokenizer st=new StringTokenizer(s,",");
- //分隔为数据项集合
- String id=st.nextToken().trim();
- String name=st.nextToken().trim();
- String email=st.nextToken().trim();
- int age=Integer.parseInt(st.nextToken().trim());
- int java=Integer.parseInt(st.nextToken().trim());
- boolean gender=st.nextToken().trim().equals("男");
- /*调用String类的spilt方法也可以实现
- String[] sa=s.split(",");
- String id1=sa[0].trim();
- String name1=sa[1].trim();
- String eamil=sa[2].trim();
- int age1=Integer.parseInt(sa[3].trim());
- boolean gender1=sa[5].trim().equals("男");
- */
- Student stu=new Student(id, name, email, java, age, gender);
- r.add(stu);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return r;
- }
- public static void main(String[] args) {
-
- TextDataLoader dll=new TextDataLoader();
- ArrayList<Student>list=dll.load();//加载数据文件内容到集合list
- int sum=0;//累加成绩
- for (int i = 0; i < list.size(); i++) {
- Student s=list.get(i);
- sum+=s.getJava();
- if (s.getJava()<60) {
- System.out.println(s.getName()+"failed.");
- }
- }
- System.out.println("average="+1.0*sum/list.size());//输出平均成绩
- Collections.sort(list);//排序集合
- for (int i = 0; i < list.size(); i++) {//按照成绩降序输出成绩单
- Student s=list.get(i);
- System.out.println(s.getId()+"\t\t\t"+s.getName()+"\t\t\t"+s.getJava());
- }
-
-
-
-
- }
- }
复制代码
这里放上D盘下a.txt的内容
001,张三,zs@163.com,20,60,男
002,李四,ls@163.com,16,85,女
007,王丽,wl@gamil.com,18,55,女
008,小白,xb@sina.com,17,89,男
006,熊猫,xm@sina.com,22,90,女
以及在Console里的输出结果
王丽failed.
average=75.8
006 熊猫 90
008 小白 89
002 李四 85
001 张三 60
007 王丽 55
具体的参考注释应该就很清楚啦,希望我能够彻底掌握它~
|
|