黑马程序员技术交流社区

标题: 存学生信息的代码,一直报数组引用超出界限错误,求帮助 [打印本页]

作者: yangqing_tt    时间: 2015-4-17 19:02
标题: 存学生信息的代码,一直报数组引用超出界限错误,求帮助
今天写了一个存学生信息的代码,一直报数组引用超出界限错误,大神帮忙给看看呀!万分感谢!

报错:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
        at com.itpractice.StudentsInfoTool.getStudents(StudentsInfoDemo.java:58)
        at com.itpractice.StudentsInfoDemo.main(StudentsInfoDemo.java:29)




代码如下,,报错误的两行已经用红颜色标出:
  1. <font color="#333333">package com.itpractice;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.util.Set;
  8. import java.util.TreeSet;

  9. /*
  10. * 有五个学生,每个学生有三门课的成绩
  11. * 从键盘录入以上数据(包括姓名,三门功课成绩)
  12. * 键盘录入的格式:zhangsan,30.40,50 计算出总成绩
  13. * 把学生的信息和课程总分按照总分由高到低顺序存放在磁盘文件“stud.txt”中
  14. *
  15. * 思想:
  16. *         1)获取键盘录入的一行数据,将数据封装成学生对象
  17. *         2)鉴于需要排序,将学生对象放入TreeSet集合中
  18. *         3)将集合中的信息写入到一个文件中
  19. *
  20. */

  21. public class StudentsInfoDemo {

  22.         public static void main(String[] args) {

  23.                 System.out.println("请输入学生信息(信息之间以逗号分隔):");
  24.                 </font><font color="#ff0000">Set<Students> studentSet = StudentsInfoTool.getStudents();</font><font color="#333333">
  25.                 System.out.println("***********成绩单***********");
  26.                 StudentsInfoTool.SaveInfo(studentSet);
  27.         }

  28. }

  29. /**
  30. * 学生工具类 从键盘录入学生信息,存储到集合中,
  31. */
  32. class StudentsInfoTool {

  33.         // 函数:将集合中的信息写入到一个文件中
  34.         public static Set<Students> getStudents() {

  35.                 // 定义存储学生对象的Set集合
  36.                 Set<Students> sets = new TreeSet<Students>();
  37.                 // 键盘输入流
  38.                 BufferedReader bfr = new BufferedReader(
  39.                                 new InputStreamReader(System.in));
  40.                 String line = null;
  41.                 try {
  42.                         // 读取输入流学生信息
  43.                         while ((line = bfr.readLine()) != null) {
  44.                                 // 若输入over,则停止输入
  45.                                 if ("over".equals(bfr))
  46.                                         break;
  47.                                 String[] info = line.split(",");

  48.                                 </font><font color="#ff0000">Students stu = new Students(info[0], Integer.parseInt(info[1]),
  49.                                                 Integer.parseInt(info[2]), Integer.parseInt(info[3]));</font><font color="#333333">
  50.                                 // 学生对象添加到Set集合中
  51.                                 sets.add(stu);
  52.                         }
  53.                 } catch (NumberFormatException e) {
  54.                         e.printStackTrace();
  55.                 } catch (IOException e) {
  56.                         e.printStackTrace();
  57.                 } finally {
  58.                         try {
  59.                                 if (bfr != null)
  60.                                         bfr.close();
  61.                         } catch (IOException e) {
  62.                                 e.printStackTrace();
  63.                         }
  64.                 }
  65.                 // 返回存储学生信息的Set集合
  66.                 return sets;
  67.         }

  68.         // 函数:将集合中的信息写入到一个文件中
  69.         public static void SaveInfo(Set<Students> sets) {
  70.                 // 输出流
  71.                 BufferedWriter bfw = null;
  72.                 try {
  73.                         bfw = new BufferedWriter(new FileWriter("stud.txt"));
  74.                         bfw.write("学生姓名------数学------语文------英语");
  75.                         for (Students stu : sets) {
  76.                                 bfw.write(stu.toString() + "\t");
  77.                                 bfw.write(stu.getSum() + "");
  78.                                 bfw.newLine();
  79.                                 bfw.flush();
  80.                         }
  81.                 } catch (IOException e) {
  82.                         e.printStackTrace();
  83.                 } finally {
  84.                         if (bfw != null)
  85.                                 try {
  86.                                         bfw.close();
  87.                                 } catch (IOException e) {
  88.                                         e.printStackTrace();
  89.                                 }
  90.                 }

  91.         }
  92. }

  93. /**
  94. * 学生类
  95. *
  96. * @author Administrator
  97. *
  98. */
  99. class Students implements Comparable {

  100.         /**
  101.          * 学生姓名
  102.          */
  103.         private String name;

  104.         /**
  105.          * 课程成绩
  106.          */
  107.         private int math;
  108.         private int chinese;
  109.         private int english;
  110.         /**
  111.          * 总成绩
  112.          */
  113.         private int sum;

  114.         /**
  115.          * 构造函数
  116.          */
  117.         public Students(String name, int math, int chinese, int english) {
  118.                 this.name = name;
  119.                 this.math = math;
  120.                 this.chinese = chinese;
  121.                 this.english = english;
  122.                 sum = math + chinese + english;
  123.         }

  124.         /**
  125.          * getXxx()和setXxx()方法
  126.          */
  127.         public String getName() {
  128.                 return name;
  129.         }

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

  133.         public int getMath() {
  134.                 return math;
  135.         }

  136.         public void setMath(int math) {
  137.                 this.math = math;
  138.         }

  139.         public int getChinese() {
  140.                 return chinese;
  141.         }

  142.         public void setChinese(int chinese) {
  143.                 this.chinese = chinese;
  144.         }

  145.         public int getEnglish() {
  146.                 return english;
  147.         }

  148.         public void setEnglish(int english) {
  149.                 this.english = english;
  150.         }

  151.         /**
  152.          * 获取学生总分
  153.          */
  154.         public int getSum() {
  155.                 return sum;
  156.         }

  157.         /**
  158.          * 重写hashCode()方法
  159.          */
  160.         @Override
  161.         public int hashCode() {
  162.                 final int prime = 31;
  163.                 int result = 1;
  164.                 result = prime * result + chinese;
  165.                 result = prime * result + english;
  166.                 result = prime * result + math;
  167.                 result = prime * result + ((name == null) ? 0 : name.hashCode());
  168.                 result = prime * result + sum;
  169.                 return result;
  170.         }

  171.         /**
  172.          * 重写equals()方法
  173.          */
  174.         @Override
  175.         public boolean equals(Object obj) {
  176.                 if (this == obj)
  177.                         return true;
  178.                 if (obj == null)
  179.                         return false;
  180.                 if (getClass() != obj.getClass())
  181.                         return false;
  182.                 Students other = (Students) obj;
  183.                 if (chinese != other.chinese)
  184.                         return false;
  185.                 if (english != other.english)
  186.                         return false;
  187.                 if (math != other.math)
  188.                         return false;
  189.                 if (name == null) {
  190.                         if (other.name != null)
  191.                                 return false;
  192.                 } else if (!name.equals(other.name))
  193.                         return false;
  194.                 if (sum != other.sum)
  195.                         return false;
  196.                 return true;
  197.         }

  198.         /**
  199.          * 重写toString()方法
  200.          */
  201.         @Override
  202.         public String toString() {
  203.                 return "Students [name=" + name + ", math=" + math + ", chinese="
  204.                                 + chinese + ", english=" + english + ", sum=" + sum + "]";
  205.         }

  206.         /**
  207.          * 重写compareTo()方法
  208.          */
  209.         @Override
  210.         public int compareTo(Object o) {
  211.                 Students s = (Students) o;
  212.                 // 总分从高到低
  213.                 int num = s.getSum() - this.getSum();
  214.                 // 总分相同,按照数学成绩从高到低
  215.                 int num2 = num == 0 ? s.getMath() - this.getMath() : num;
  216.                 // 总分、数学相同,按照语文成绩从高到低
  217.                 int num3 = num2 == 0 ? s.getChinese() - this.getChinese() : num2;
  218.                 // 总分、数学、语文相同,按照英语成绩从高到低
  219.                 int num4 = num3 == 0 ? s.getEnglish() - this.getEnglish() : num3;
  220.                 // 总分、数学、语文、英语相同,按照姓名自然顺序排序
  221.                 int num5 = num4 == 0 ? s.getName().compareTo(this.getName()) : num4;
  222.                 return num5;
  223.         }

  224. }
  225. </font>
复制代码



搜狗截图20150417185933.png (70.4 KB, 下载次数: 1)

搜狗截图20150417185933.png

作者: yangqing_tt    时间: 2015-4-17 20:40
懂了,懂了,已经解决了!原来把循环判断条件写错了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2