黑马程序员技术交流社区

标题: 求大神看看代码出了什么问题? [打印本页]

作者: 小白--zz    时间: 2017-6-11 03:37
标题: 求大神看看代码出了什么问题?
我碰到的问题是while循环出不来,我在输入数据之后输入over结束不了循环
除非是直接输入over可以结束循环


我把下面的代码注释掉之后也能出来,问题在这一句,注释掉能运行
帮我看看什么问题啊
ts.add(new Student(strs[0],Integer.parseInt(strs[1]),
                                                        Integer.parseInt(strs[2]),Integer.parseInt(strs[3])));






package cn.text;

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class Text10 {

        /*
         * 10、有五个学生,每个学生有3门课(语文、数学、英语)的成绩,
         * 写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),
         * 然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
         * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
         *
         * 思路:
         * 首先接收键盘录入的数据,判断格式是否合格
         * 建立一个学生类的对象封装数据
         * 使用Treeset集合封装学生对象并自定义比较器
         * 要将对象进行io的操作需要实现接口,或者
         *
         *
         *
         */
        public static void main(String[] args) throws IOException {
                //提示输出格式
                //定义输入流接受键盘录入
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                //定义集合接收Person对象
                TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {

                        @Override
                        public int compare(Student o1, Student o2) {
                               
                                return o2.getSum()-o1.getSum();
                        }
                       
                });
                String line = null;
                //接收数据
                System.out.println("请按照\"姓名,语文成绩,数学成绩,英语成绩\"格式输出");
                while((line = br.readLine()) != null)
                {
                        //判定退出时机
                        System.out.println("over".equals(line));
                        if("over".equals(line))
                         {
                                 break;
                         }else{
                                //判定字符串格式是否符合要求
                                String[] strs = line.split(",");
                                if(strs.length != 4)
                                {
                                        System.out.println("数据格式错误,请按照\"姓名,语文成绩,数学成绩,英语成绩\"格式输出");
                                }else{
                                        //集合封装对象
                                        ts.add(new Student(strs[0],Integer.parseInt(strs[1]),
                                                        Integer.parseInt(strs[2]),Integer.parseInt(strs[3])));
                                }
                        }
                       
                }
                //输出集合内容到指定的文件
                FileOutputStream os = new FileOutputStream("stu.txt");
                //遍历集合,取出对象
                for(Iterator<Student> it = ts.iterator();it.hasNext();)
                {
                        os.write(it.toString().getBytes());
                        os.flush();
                }
                os.close();
        }
}
作者: feiling    时间: 2017-6-11 08:03
       os.write(it.toString().getBytes());                         os.flush();                 }这句代码写错了
作者: feiling    时间: 2017-6-11 08:05
   for(Iterator<Student> it = ts.iterator();it.hasNext();)   刚才复制错了 应该是这个代码 你一直死循环了 看下你的 stu.txt 。。。。。我刚才执行了下 懵逼了
作者: feiling    时间: 2017-6-11 08:20
解决方法
Iterator<Student> it = ts.iterator();
                while(it.hasNext()){
                        Student ss = it.next();//因为你没it.next()  就是取得当前集合的元素
                        os.write(ss.toString().getBytes());
                       
                    os.flush();
                       
                }
作者: 小白--zz    时间: 2017-6-11 17:54
哦,我看到了,哎谢谢了,我没有调用iterator的next()方法,早上重写了一下好了,当时没注意到是这里的问题





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