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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝福明 中级黑马   /  2013-1-2 11:09  /  2363 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郝福明 于 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的第二次输入会覆盖掉第一个?

评分

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

查看全部评分

3 个回复

正序浏览
你好
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循环去掉试试。

希望可以帮到你。
回复 使用道具 举报
System.out.println("请入选择是否继续输入,输入1暂停,输入0继续");
  i=sc.nextInt();
你这句话后面加个判断,if(i==1){break;}这是直接停止,跳出循环,我不知道你的暂停怎么弄。。
至于你说的覆盖的问题,我想可能是出在int result = s1.getSum() - s2.getSum();这一句了,我不知道你Student类的这个方法是怎么写的应该是总分吧?(不理解的是如果是总分,你后面为什么又要获取一个总分呢?),就算你的方法是总分吧 ,不过我觉得你应该是想判断是不是同一个学生吧?如果是这样的话,你为什么不先判断名字什么的呢?你先判断总分,这本身就有问题了,不同的人完全可能总分加起来一样的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马