黑马程序员技术交流社区

标题: FileWrite写入不停止 [打印本页]

作者: 郝福明    时间: 2013-1-2 11:09
标题: FileWrite写入不停止
本帖最后由 郝福明 于 2013-1-5 08:58 编辑

public static void print() {

                String name = null;
                int sum = 0;
                int i=0;
                String score=null;
                boolean flag = true;
                Scanner sc = null;
                BufferedWriter bfw = null;
                Set<Student> sets = null;
                while(i!=1) {

                        Grade grade = new Grade();
                        sc = new Scanner(System.in);
                        System.out.println("请输入姓名");

                        name = sc.next();
                        System.out.println("请输入" + CourseType.chinese + "成绩");
                        grade.chineseGrade = sc.nextInt();
                        System.out.println("请输入" + CourseType.math + "成绩");
                        grade.mathGrade = sc.nextInt();
                        System.out.println("请输入" + CourseType.english + "成绩");
                        grade.englishGrade = sc.nextInt();

                        System.out.println("请入选择是否继续输入,输入1暂停,输入0继续");
                        i=sc.nextInt();
                        sets = new TreeSet(new Comparator<Student>() {
                                @Override
                                public int compare(Student s1, Student s2) {
                                        int result = s1.getSum() - s2.getSum();
                                        if (result == 0) {
                                                result = s1.getName().compareTo(s2.getName());
                                        }
                                        return result;
                                }
                        });
                        sum = grade.chineseGrade + grade.mathGrade + grade.englishGrade;
                        sets.add(new Student(name, sum));
                        score="语文成绩"+grade.chineseGrade + "数学成绩" + grade.mathGrade + "英语成绩" + grade.englishGrade;
                }
                try {
                        bfw = new BufferedWriter(new FileWriter("D:\\NewFile\\exam\\src\\com\\itheima\\stu.txt"));
                        while(sets.size()!=0){
                                for(Student s:sets){
                                        bfw.write(s.getName()+" "+score+"总成绩"+sum);
                                        bfw.newLine();
                                        bfw.flush();
                                }
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                }finally{
                        if(bfw!=null){
                                try {
                                        bfw.close();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                }
        }
        
}
当我输入1结束的时候开始往txt里写,但是就是停止不了。一直写下去了,怎样让它停止啊。还有一个问题就是为什么sets的第二次输入会覆盖掉第一个?

作者: 肖志锋    时间: 2013-1-2 14:04
System.out.println("请入选择是否继续输入,输入1暂停,输入0继续");
  i=sc.nextInt();
你这句话后面加个判断,if(i==1){break;}这是直接停止,跳出循环,我不知道你的暂停怎么弄。。
至于你说的覆盖的问题,我想可能是出在int result = s1.getSum() - s2.getSum();这一句了,我不知道你Student类的这个方法是怎么写的应该是总分吧?(不理解的是如果是总分,你后面为什么又要获取一个总分呢?),就算你的方法是总分吧 ,不过我觉得你应该是想判断是不是同一个学生吧?如果是这样的话,你为什么不先判断名字什么的呢?你先判断总分,这本身就有问题了,不同的人完全可能总分加起来一样的。
作者: 何竹冬    时间: 2013-1-3 15:41
你好
while(sets.size()!=0){
                                for(Student s:sets){
                                        bfw.write(s.getName()+" "+score+"总成绩"+sum);
                                        bfw.newLine();
                                        bfw.flush();
                                }
                        }
把while循环去掉高级for循环就是在遍历set集合了不用while了,你的while循环是sets.size()!=0一直成立的,size不可能为0啊,你已经把学生对象存进去了。
所以会一直循环停不了。

把while循环去掉试试。

希望可以帮到你。




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