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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lmy518 中级黑马   /  2015-11-20 21:58  /  668 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;
/*
键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩),\
*/
public class TreeSetText {
        public static void main(String[] args) {
                //创建TreeSet集合
                TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>(){
                        @Override
                        public int compare(Student s1, Student s2) {
                                //总分
                                int num = s2.getSum() - s1.getSum();
                                //语文成绩比较
                                int num2 = (num == 0) ? (s2.getChineseScore() - s1
                                                .getChineseScore()) : num;
                                //数学成绩比较
                                int num3 = (num2 == 0) ? (s2.getMatnScore() - s1.getMatnScore())
                                                : num2;
                                //名字比较
                                int result = (num3 == 0) ?(s2.getName().compareTo(s1.getName()))
                                                : num3;
                                return result;
                        }
                       
                });
               
                //创建3个学生对象
                for(int i = 0; 1 < 3; i++) {
                        //键盘输入
                        System.out.println("请输入姓名:");
                        String name = new Scanner(System.in).nextLine();
                       
                        System.out.println("请输入语文成绩:");
                        int chineseScore = new Scanner(System.in).nextInt();                       
                        System.out.println("请输入数学成绩:");
                        int matnScore = new Scanner(System.in).nextInt();                       
                        System.out.println("请输入英语成绩:");
                        int englishScore = new Scanner(System.in).nextInt();
                       
                        //添加学生对象到 集合
                        ts.add(new Student(name, chineseScore, matnScore, englishScore));
                }
               
                //遍历
                System.out.println("姓名\t" + "语文成绩\t" + "数学成绩\t" + "英语成绩\t" + "总分\t");
                for(Student s : ts) {
                        System.out.println(s.getName()+ "\t" +s.getChineseScore()+ "\t" +s.getMatnScore()+ "\t"
                                        +s.getEnglishScore()+ "\t" +s.getSum());
                }
        }
}
报错说是执行不到的代码,如果自动修复就是让你删除这行代码,如果第58行代码删除(也就是遍历下面的ystem.out.println("姓名\t" + "语文成绩\t" + "数学成绩\t" + "英语成绩\t" + "总分\t");这一行,如果删除,就会提示59行一样的报错,研究一个小时了,还是没有找到原因,我和视频里的代码对照一下,除了matn不一样外,其他的都一样。但我复制视频里的代码就可以正常运行,这个确提示报错。)

QQ图片20151120215332.png (121.91 KB, 下载次数: 8)

QQ图片20151120215332.png

9 个回复

倒序浏览
              //添加学生对象到 集合
                        ts.add(new Student(name, chineseScore, matnScore, englishScore));
                }这个大括号代表的是上一个方法的结束,下面当然执行不到了
               
                //遍历
                System.out.println("姓名\t" + "语文成绩\t" + "数学成绩\t" + "英语成绩\t" + "总分\t");
                for(Student s : ts) {
                        System.out.println(s.getName()+ "\t" +s.getChineseScore()+ "\t" +s.getMatnScore()+ "\t"
                                        +s.getEnglishScore()+ "\t" +s.getSum());

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1

查看全部评分

回复 使用道具 举报
看起来代码有点复杂啊  代码量对于我来说有点大
回复 使用道具 举报
深寒丶 发表于 2015-11-21 00:00
//添加学生对象到 集合
                        ts.add(new Student(name, chineseScore, m ...

不是这个原因,如果那个大括号删除的话,那下面的3个大括号就会报错。那遍历就没法遍历了。
回复 使用道具 举报
袁有福123 发表于 2015-11-21 12:30
看起来代码有点复杂啊  代码量对于我来说有点大

等学到了就不复杂了,说实话,这个代码是我偶尔看下视频敲出来的,结果还报错了,我感觉和视频里的代码完全一样,还是报错,就不知道为啥。
回复 使用道具 举报
lmy518 发表于 2015-11-21 23:11
不是这个原因,如果那个大括号删除的话,那下面的3个大括号就会报错。那遍历就没法遍历了。 ...

你把那个大括号删除在最后面加一个试试
回复 使用道具 举报
        //名字比较
                                int result = (num3 == 0) ?(s2.getName().compareTo(s1.getName()))
                                                : num3;
                                return result;
                        }
                        
                });还有这的括号是什么鬼
回复 使用道具 举报
是不是格式写错了
回复 使用道具 举报
lmy518 中级黑马 2015-11-22 17:18:20
9#
深寒丶 发表于 2015-11-21 23:19
//名字比较
                                int result = (num3 == 0) ?(s2.getName().compareTo ...

那个括号是TreeSet集合比较器
回复 使用道具 举报
lmy518 中级黑马 2015-11-22 17:19:52
10#
nice非飞 发表于 2015-11-21 23:40
是不是格式写错了

要怎么修改
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马