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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

请大家帮忙看看代码:运行时候一直说数组角标越界异常 ,我看了几遍没找到问题所在,请指教

package com.itheima;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.TreeSet;

public class StudentDemo {

        /**
         * 需求:从键盘录入学生信息如:zhangsan,60,50,40
         * 将学生信息存入文件F:\\stu.txt中,并按照总分高低由高到低排序
         * 步骤:1建立学生类,具有:姓名三科成绩总分五个成员变量,因为需要排序
         * 所以实现接口比较器implements Compareable<Student>
         * 复写compareTo方法  和toString方法因为学生信息存储可以使用treeSet集合
         * 2 创建一个学生工具类,将键盘输入的学生信息装入treeSet集合中,
         * 3创建一个类将集合数据写入指定文件中
         *
         *
         *
         *
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                TreeSet<Student> ts=StudentInfo.getStudent();
                new Write2File(ts).writeStudent();
               
        }

}
class Write2File{
        private TreeSet<Student> ts;
        Write2File(TreeSet<Student> ts){
                this.ts=ts;
               
        }
        public void writeStudent(){
                BufferedWriter bufw=null;
                Iterator<Student> it = ts.iterator();
                while(it.hasNext()){
                       
                        try {
                                bufw=new BufferedWriter(new FileWriter("F:\\stu.txt"));
                                bufw.write(it.next().toString());
                                bufw.newLine();
                                bufw.flush();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
               
                        try {
                        if(bufw!=null)       
                                bufw.close();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                       
               
               
        }
       
       
       
       
}
class StudentInfo{
        public static TreeSet<Student> getStudent(){
                BufferedReader bufr =new BufferedReader(new InputStreamReader(System.in));
                String line =null;
                TreeSet<Student> ts=new TreeSet<Student>();
                try {
                        while((line=bufr.readLine())!=null){
                        String[] info =new String[1024];
                        int i=0;
                        while(line!=null){
                                if("over".equals(line))
                                        break;       
                                else if(",".equals(line))//可以使用line.split切换
                                        continue;
                                /*
                                 * String[] info=line.split(",");
                                 * Interger.pareseInt(String)
                                 * 可以将String类型转换成整型
                                 * */
                                else info[i++]=line;
                               
                        }
                       
                        ts.add(new Student(info[0],Integer.parseInt(info[1]),
                                        Integer.parseInt(info[2]),Integer.parseInt(info[3])));
                        }
                } catch (NumberFormatException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                finally{
                        try {
                                bufr.close();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                       
                }
                return ts;
               
        }
       
}
class Student implements Comparable<Student>{
        private String name;
        private int num;
        private int math,english,chinese;
        Student(String name,int math,int english,int chinese){
                this.name=name;
                this.math=math;
                this.english=english;
                this.chinese=chinese;
                this.num=math+english+chinese;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getNum() {
                return num;
        }
        @Override
        public int compareTo(Student s) {
                if((this.num-num)==0)
                        return this.name.compareTo(s.name);
                return this.num-s.num;
        }
        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + ((name == null) ? 0 : name.hashCode());
                result = prime * result + num;
                return result;
        }
        @Override
        public String toString() {
                return name +"  " + chinese + "  " + english
                                + "  " + math +  "  " + num ;
        }
        @Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (getClass() != obj.getClass())
                        return false;
                Student other = (Student) obj;
                if (name == null) {
                        if (other.name != null)
                                return false;
                } else if (!name.equals(other.name))
                        return false;
                if (num != other.num)
                        return false;
                return true;
        }
       
       
       
}

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

3 个回复

倒序浏览
这是修改后的代码,没有报告异常 但是输入后没法停止而且没有创建文件
  1. package com.itheima;

  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.Iterator;
  8. import java.util.TreeSet;

  9. public class StudentDemo {

  10.         /**
  11.          * 需求:从键盘录入学生信息如:zhangsan,60,50,40
  12.          * 将学生信息存入文件F:\\stu.txt中,并按照总分高低由高到低排序
  13.          * 步骤:1建立学生类,具有:姓名三科成绩总分五个成员变量,因为需要排序
  14.          * 所以实现接口比较器implements Compareable<Student>
  15.          * 复写compareTo方法  和toString方法因为学生信息存储可以使用treeSet集合
  16.          * 2 创建一个学生工具类,将键盘输入的学生信息装入treeSet集合中,
  17.          * 3创建一个类将集合数据写入指定文件中
  18.          *
  19.          *
  20.          *
  21.          *
  22.          * @param args
  23.          */
  24.         public static void main(String[] args) {
  25.                 // TODO Auto-generated method stub
  26.                 TreeSet<Student> ts=StudentInfo.getStudent();
  27.                 new Write2File(ts).writeStudent();
  28.                
  29.         }

  30. }
  31. class Write2File{
  32.         private TreeSet<Student> ts;
  33.         Write2File(TreeSet<Student> ts){
  34.                 this.ts=ts;
  35.                
  36.         }
  37.         public void writeStudent(){
  38.                 BufferedWriter bufw=null;
  39.                 Iterator<Student> it = ts.iterator();
  40.                 while(it.hasNext()){
  41.                        
  42.                         try {
  43.                                 bufw=new BufferedWriter(new FileWriter("F:\\stu.txt"));
  44.                                 bufw.write(it.next().toString());
  45.                                 bufw.newLine();
  46.                                 bufw.flush();
  47.                         } catch (IOException e) {
  48.                                 // TODO Auto-generated catch block
  49.                                 e.printStackTrace();
  50.                         }
  51.                 }
  52.                
  53.                         try {
  54.                         if(bufw!=null)       
  55.                                 bufw.close();
  56.                 } catch (IOException e) {
  57.                         // TODO Auto-generated catch block
  58.                         e.printStackTrace();
  59.                 }
  60.                        
  61.                
  62.                
  63.         }
  64.        
  65.        
  66.        
  67.        
  68. }
  69. class StudentInfo{
  70.         public static TreeSet<Student> getStudent(){
  71.                 BufferedReader bufr =new BufferedReader(new InputStreamReader(System.in));
  72.                 String line =null;
  73.                 TreeSet<Student> ts=new TreeSet<Student>();
  74.                 try {
  75.                         while(!("over".equals(line))){
  76.                         String[] info =new String[4];
  77.                         for(int i=0;i<4;i++){
  78.                                
  79.                                 if((line=bufr.readLine())!=null){
  80.                                
  81.                                 /*
  82.                                  * String[] info=line.split(",");
  83.                                  * Interger.pareseInt(String)
  84.                                  * 可以将String类型转换成整型
  85.                                  * */
  86.                                         info[i]=line;
  87.                                
  88.                                 }
  89.                         }
  90.                        
  91.                        
  92.                         ts.add(new Student(info[0],Integer.parseInt(info[1]),
  93.                                         Integer.parseInt(info[2]),Integer.parseInt(info[3])));
  94.                        
  95.                         }
  96.                 } catch (NumberFormatException e) {
  97.                         // TODO Auto-generated catch block
  98.                         e.printStackTrace();
  99.                 } catch (IOException e) {
  100.                         // TODO Auto-generated catch block
  101.                         e.printStackTrace();
  102.                 }
  103.                 finally{
  104.                         try {
  105.                                 bufr.close();
  106.                         } catch (IOException e) {
  107.                                 // TODO Auto-generated catch block
  108.                                 e.printStackTrace();
  109.                         }
  110.                        
  111.                 }
  112.                 return ts;
  113.                
  114.         }
  115.        
  116. }
  117. class Student implements Comparable<Student>{
  118.         private String name;
  119.         private int num;
  120.         private int math,english,chinese;
  121.         Student(String name,int math,int english,int chinese){
  122.                 this.name=name;
  123.                 this.math=math;
  124.                 this.english=english;
  125.                 this.chinese=chinese;
  126.                 this.num=math+english+chinese;
  127.         }
  128.         public String getName() {
  129.                 return name;
  130.         }
  131.         public void setName(String name) {
  132.                 this.name = name;
  133.         }
  134.         public int getNum() {
  135.                 return num;
  136.         }
  137.         @Override
  138.         public int compareTo(Student s) {
  139.                 if((this.num-num)==0)
  140.                         return this.name.compareTo(s.name);
  141.                 return this.num-s.num;
  142.         }
  143.         @Override
  144.         public int hashCode() {
  145.                 final int prime = 31;
  146.                 int result = 1;
  147.                 result = prime * result + ((name == null) ? 0 : name.hashCode());
  148.                 result = prime * result + num;
  149.                 return result;
  150.         }
  151.         @Override
  152.         public String toString() {
  153.                 return name +"  " + chinese + "  " + english
  154.                                 + "  " + math +  "  " + num ;
  155.         }
  156.         @Override
  157.         public boolean equals(Object obj) {
  158.                 if (this == obj)
  159.                         return true;
  160.                 if (obj == null)
  161.                         return false;
  162.                 if (getClass() != obj.getClass())
  163.                         return false;
  164.                 Student other = (Student) obj;
  165.                 if (name == null) {
  166.                         if (other.name != null)
  167.                                 return false;
  168.                 } else if (!name.equals(other.name))
  169.                         return false;
  170.                 if (num != other.num)
  171.                         return false;
  172.                 return true;
  173.         }
  174.        
  175.        
  176.        
  177. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
  1. 经过多次验证,总算校验成功了!恭喜自己!加油!


  2. package com.itheima;

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

  10. public class StudentDemo {

  11.         /**
  12.          * 需求:从键盘录入学生信息如:zhangsan,60,50,40
  13.          * 将学生信息存入文件F:\\stu.txt中,并按照总分高低由高到低排序
  14.          * 步骤:1建立学生类,具有:姓名三科成绩总分五个成员变量,因为需要排序
  15.          * 所以实现接口比较器implements Compareable<Student>
  16.          * 复写compareTo方法  和toString方法因为学生信息存储可以使用treeSet集合
  17.          * 2 创建一个学生工具类,将键盘输入的学生信息装入treeSet集合中,
  18.          * 3创建一个类将集合数据写入指定文件中
  19.          *
  20.          *
  21.          *
  22.          *
  23.          * @param args
  24.          */
  25.         public static void main(String[] args) {
  26.                 // TODO Auto-generated method stub
  27.                 TreeSet<Student> ts=StudentInfo.getStudent();
  28.                 new Write2File(ts).writeStudent();
  29.                
  30.         }

  31. }
  32. class Write2File{
  33.         private TreeSet<Student> ts;
  34.         Write2File(TreeSet<Student> ts){
  35.                 this.ts=ts;
  36.                
  37.         }
  38.         public void writeStudent(){
  39.                 BufferedWriter bufw=null;
  40.                 Iterator<Student> it = ts.iterator();
  41.                 while(it.hasNext()){
  42.                         //System.out.println("此学生信息读入成功");
  43.                         try {
  44.                                 bufw=new BufferedWriter(new FileWriter("F:\\stu.txt",true));
  45.                                 bufw.write(it.next().toString());
  46.                                
  47.                                 bufw.newLine();
  48.                                 bufw.flush();
  49.                                
  50.                         } catch (IOException e) {
  51.                                 // TODO Auto-generated catch block
  52.                                 e.printStackTrace();
  53.                         }
  54.                 }
  55.                
  56.                         try {
  57.                         if(bufw!=null)       
  58.                                 bufw.close();
  59.                 } catch (IOException e) {
  60.                         // TODO Auto-generated catch block
  61.                         e.printStackTrace();
  62.                 }
  63.                        
  64.                
  65.                
  66.         }
  67.        
  68.        
  69.        
  70.        
  71. }
  72. class StudentInfo{
  73.         public static TreeSet<Student> getStudent(){
  74.                 BufferedReader bufr =new BufferedReader(new InputStreamReader(System.in));
  75.                 String line =null;
  76.                 TreeSet<Student> ts=new TreeSet<Student>();
  77.                 try {
  78.                         while(true){
  79.                         String[] info =new String[4];
  80.                         for(int i=0;i<4;i++){
  81.                                
  82.                                 if((line=bufr.readLine())!=null){
  83.                                
  84.                                 /*
  85.                                  * String[] info=line.split(",");
  86.                                  * Interger.pareseInt(String)
  87.                                  * 可以将String类型转换成整型
  88.                                  * */
  89.                                         if("over".equals(line))
  90.                                                 break;
  91.                                         //System.out.println(i);
  92.                                         info[i]=line;
  93.                                
  94.                                 }
  95.                         }
  96.                         if("over".equals(line))
  97.                                 break;
  98.                         //System.out.println(line.toString());
  99.                         ts.add(new Student(info[0],Integer.parseInt(info[1]),
  100.                                         Integer.parseInt(info[2]),Integer.parseInt(info[3])));
  101.                        
  102.                         }
  103.                 } catch (NumberFormatException e) {
  104.                         // TODO Auto-generated catch block
  105.                         e.printStackTrace();
  106.                 } catch (IOException e) {
  107.                         // TODO Auto-generated catch block
  108.                         e.printStackTrace();
  109.                 }
  110.                 finally{
  111.                         try {
  112.                                 bufr.close();
  113.                         } catch (IOException e) {
  114.                                 // TODO Auto-generated catch block
  115.                                 e.printStackTrace();
  116.                         }
  117.                        
  118.                 }
  119.                 return ts;
  120.                
  121.         }
  122.        
  123. }
  124. class Student implements Comparable<Student>{
  125.         private String name;
  126.         private int num;
  127.         private int math,english,chinese;
  128.         Student(String name,int math,int english,int chinese){
  129.                 this.name=name;
  130.                 this.math=math;
  131.                 this.english=english;
  132.                 this.chinese=chinese;
  133.                 this.num=math+english+chinese;
  134.         }
  135.         public String getName() {
  136.                 return name;
  137.         }
  138.         public void setName(String name) {
  139.                 this.name = name;
  140.         }
  141.         public int getNum() {
  142.                 return num;
  143.         }
  144.         @Override
  145.         public int compareTo(Student s) {
  146.                 if((this.num-num)==0)
  147.                         return this.name.compareTo(s.name);
  148.                 return this.num-s.num;
  149.         }
  150.         @Override
  151.         public int hashCode() {
  152.                 final int prime = 31;
  153.                 int result = 1;
  154.                 result = prime * result + ((name == null) ? 0 : name.hashCode());
  155.                 result = prime * result + num;
  156.                 return result;
  157.         }
  158.         @Override
  159.         public String toString() {
  160.                 return name +"  " + chinese + "  " + english
  161.                                 + "  " + math +  "  " + num ;
  162.         }
  163.         @Override
  164.         public boolean equals(Object obj) {
  165.                 if (this == obj)
  166.                         return true;
  167.                 if (obj == null)
  168.                         return false;
  169.                 if (getClass() != obj.getClass())
  170.                         return false;
  171.                 Student other = (Student) obj;
  172.                 if (name == null) {
  173.                         if (other.name != null)
  174.                                 return false;
  175.                 } else if (!name.equals(other.name))
  176.                         return false;
  177.                 if (num != other.num)
  178.                         return false;
  179.                 return true;
  180.         }
  181.        
  182.        
  183.        
  184. }
复制代码
回复 使用道具 举报
这个是入学测试题吧,嘿,我做过
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马