A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张向辉 于 2013-1-30 11:48 编辑
  1. import java.io.*;
  2. import java.util.*;

  3. class  getStudentInfoDemo
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 Comparator<Student> cmp = Collections.reverseOrder();
  8.                 Set<Student> stus = infoTool.getStudentSet(cmp);
  9.                 File f = new File("r:\\1.txt");
  10.                 infoTool.writeInfo(stus,f);
  11.                
  12.         }
  13. }

  14. class Student implements Comparable<Student>//学生类
  15. {
  16.         private String name;
  17.         private int cn,ma,en;
  18.         private int sum;

  19.         Student(String name, int cn, int ma,int en)
  20.         {
  21.                 this.name = name;
  22.                 this.cn = cn ;
  23.                 this.ma = ma ;
  24.                 this.en = en ;
  25.                 getSum() ;
  26.         }
  27.         
  28.         public String getName()
  29.         {
  30.                 return name;
  31.         }

  32.         public int getSum()
  33.         {
  34.                 return sum = cn + ma + en ;
  35.         }

  36.         public String toString()
  37.         {
  38.                 return "学生:{\t"+name+",\t语文"+cn+",\t数学"+ma+",\t英语"+en+"\t}"+"总分"+sum;
  39.         }
  40.         
  41.         public int hashCode()
  42.         {
  43.                 return name.hashCode()+sum*17;
  44.         }
  45.         
  46.         public boolean equals (Object obj)
  47.         {
  48.                 if(!(obj instanceof Student))
  49.                         throw new ClassCastException("输入的类型不是学生类");
  50.                 Student s = (Student)obj;
  51.                 return this.name.equals(s.name) && this.sum == s.sum ;
  52.         }

  53.         public int compareTo(Student s)
  54.         {
  55.                 int num = new Integer(this.sum).compareTo(new Integer(s.sum));
  56.                 if(num==0)
  57.                         return this.name.compareTo(s.name);
  58.                 return num;
  59.         }
  60. }

  61. class infoTool//工具类
  62. {
  63.         public static Set<Student> getStudentSet(Comparator<Student> cmp)//获取集合的
  64.         {        
  65.                 System.out.println("请输入学生的姓名和语文,数学,英语成绩,例如(张三,60,60,60)");
  66.                 BufferedReader buffr = null;
  67.                 Set<Student> stuSet = new TreeSet<Student>(cmp);

  68.                 try
  69.                 {        
  70.                         buffr = new BufferedReader(new InputStreamReader(System.in));
  71.                         String line = null;
  72.                         while((line=buffr.readLine())!=null)
  73.                         {
  74.                                 if(line.equals("over"))
  75.                                         break;
  76.                                 String[] arr = line.split(",");
  77.                                 Student stu = new Student(arr[0],Integer.parseInt(arr[1]),Integer.parseInt(arr[2]),Integer.parseInt(arr[3]));
  78.                                 stuSet.add(stu);                                
  79.                         }
  80.                         return stuSet;
  81.                 }
  82.                 catch (IOException e)
  83.                 {
  84.                         throw new RuntimeException("输入信息失败");
  85.                 }
  86.                 finally
  87.                 {
  88.                         try
  89.                         {
  90.                                 if(buffr!=null)
  91.                                         buffr.close();
  92.                         }
  93.                         catch (IOException e)
  94.                         {
  95.                                 throw new RuntimeException("关闭失败");
  96.                         }
  97.                 }
  98.         }

  99.         public static void writeInfo(Set<Student> s , File f)//写入文件的
  100.         {
  101.                 BufferedWriter buffw = null;
  102.                 try
  103.                 {        buffw = new BufferedWriter(new FileWriter(f));
  104.                         for(Student stu : s)
  105.                         {
  106.                                 
  107.                                 buffw.write(stu.toString());
  108.                                 buffw.newLine();
  109.                                 buffw.flush();
  110.                         }
  111.                 }
  112.                 catch (IOException e)
  113.                 {
  114.                         throw new RuntimeException("输出信息失败");
  115.                 }
  116.                 finally
  117.                 {
  118.                         try
  119.                         {
  120.                                 if(buffw!=null)
  121.                                         buffw.close();
  122.                         }
  123.                         catch (IOException e)
  124.                         {
  125.                                 throw new RuntimeException("关闭失败");
  126.                         }
  127.                 }
  128.         }
  129. }
  130. //就连续按了2下回车就出异常的了 功能是能正常的....
复制代码

未命名.jpg (24.69 KB, 下载次数: 13)

未命名.jpg

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9

查看全部评分

2 个回复

倒序浏览

Student stu = new Student(arr[0],Integer.parseInt(arr[1]),Integer.parseInt(arr[2]),Integer.parseInt(arr[3]));
这个地方你应该判断一下。
如果你连着按两个回车
arr.length=1 就不会有arr[1]了  所以肯定越界了

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
那是因为当你代码的第84,85 判断一下就好。
if(arr.length==4){
                                        Student stu = new Student(arr[0],Integer.parseInt(arr[1]),Integer.parseInt(arr[2]),Integer.parseInt(arr[3]));

                                    stuSet.add(stu);
                                }else{
                                        System.out.println("输入错误");
                                }
就是当你输入的不能分割成四个部分的时候就提示输入错误。

评分

参与人数 1技术分 +2 收起 理由
Rancho_Gump + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马