黑马程序员技术交流社区
标题:
求大神看看代码出了什么问题?
[打印本页]
作者:
小白--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