我碰到的问题是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();
}
} |
|