黑马程序员技术交流社区

标题: 点招题2(键盘录入,封装对象,集合) [打印本页]

作者: kangnam    时间: 2016-9-19 17:42
标题: 点招题2(键盘录入,封装对象,集合)
比下面这题还简单一点点,参数只有姓名,年龄,分数
public class Test7 {
        /**
         * * A:案例演示
         * 需求:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台。
         *
         * 分析:
         * 1,定义一个学生类
         *                 成员变量:姓名,语文成绩,数学成绩,英语成绩,总成绩
         *                 成员方法:空参,有参构造,有参构造的参数分别是姓名,语文成绩,数学成绩,英语成绩
         *                           toString方法,在遍历集合中的Student对象打印对象引用的时候会显示属性值
         * 2,键盘录入需要Scanner,创建键盘录入对象
         * 3,创建TreeSet集合对象,在TreeSet的构造函数中传入比较器,按照总分比较
         * 4,录入五个学生,所以以集合中的学生个数为判断条件,如果size是小于5就进行存储
         * 5,将录入的字符串切割,用逗号切割,会返回一个字符串数组,将字符串数组中从二个元素转换成int数,
         * 6,将转换后的结果封装成Student对象,将Student添加到TreeSet集合中
         * 7,遍历TreeSet集合打印每一个Student对象
         
        public static void main(String[] args) {
                //2,键盘录入需要Scanner,创建键盘录入对象
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入学生成绩格式是:姓名,语文成绩,数学成绩,英语成绩");
                //3,创建TreeSet集合对象,在TreeSet的构造函数中传入比较器,按照总分比较
                TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {

                        @Override
                        public int compare(Student s1, Student s2) {
                                int num = s2.getSum() - s1.getSum();
                                return num == 0 ? 1 : num;
                        }
                });
                //4,录入五个学生,所以以集合中的学生个数为判断条件,如果size是小于5就进行存储
                while(ts.size() < 5) {
                        //5,将录入的字符串切割,用逗号切割,会返回一个字符串数组,将字符串数组中从二个元素转换成int数,
                        String line = sc.nextLine();
                        String[] arr = line.split(",");
                        int chinese = Integer.parseInt(arr[1]);
                        int math = Integer.parseInt(arr[2]);
                        int english = Integer.parseInt(arr[3]);
                        //6,将转换后的结果封装成Student对象,将Student添加到TreeSet集合中
                        ts.add(new Student(arr[0], chinese, math, english));
                }
               
                //7,遍历TreeSet集合打印每一个Student对象
                System.out.println("排序后的学生信息:");
                for (Student s : ts) {
                        System.out.println(s);
                }
        }

作者: nicezt    时间: 2016-9-19 17:59
学习了!
作者: kansyoukyou    时间: 2016-9-19 21:52
我先试着做一下。
作者: lixuelin    时间: 2016-9-19 22:27
我还没学set集合
我直接这样输入5个学生信息然后用set集合否也可以比较学生成绩然后遍历呢
                Scanner sc = new Scanner(System.in);
                ArrayList<Student> list = new ArrayList<Student>();
                for(int i = 0; i < 5 ; i ++){
                        System.out.println("请输入学生姓名");
                        String name = sc.next();
                        System.out.println("请输入语文成绩");
                        int chineseSorce = sc.nextInt();
                        System.out.println("请输入数学成绩");
                        int mathSorce = sc.nextInt();
                        System.out.println("请输入英语成绩");
                        int englishSorce = sc.nextInt();
                        list.add(new Student(name,chineseSorce,mathSorce,englishSorce));
                }
作者: fiendGG    时间: 2016-9-19 22:30
看着好难啊。。。。
作者: changfa    时间: 2016-9-19 22:42
值得借鉴
作者: kansyoukyou    时间: 2016-9-19 22:57
首先第一行输完后就出现了ArrayIndexOutOfBoundsException这个异常,第二,不明白如何只用spilt()方法就可以将输入的字符串中的字符和数字分开。
作者: feng_pump    时间: 2016-9-19 23:04
如果点招只是考这样的还是可以的,O(∩_∩)O哈哈哈~
作者: mawenliang    时间: 2016-9-19 23:34
按我现在的知识,,看这个感觉太遥远!
作者: 江月念华    时间: 2016-9-19 23:34
这是什么的点招题,Android还是javaee
作者: 郑大仙丶    时间: 2016-9-19 23:56
赞赞赞赞赞赞赞赞
作者: haoge349    时间: 2016-9-20 00:46
好定西,做一下
作者: kangnam    时间: 2016-9-20 11:17
江月念华 发表于 2016-9-19 23:34
这是什么的点招题,Android还是javaee

JavaEE的。。。。。。。。。。。
作者: kangnam    时间: 2016-9-20 11:23
lixuelin 发表于 2016-9-19 22:27
我还没学set集合
我直接这样输入5个学生信息然后用set集合否也可以比较学生成绩然后遍历呢
                Scanner sc =  ...

但是他要求用split,说明用字符串录入
作者: kangnam    时间: 2016-9-20 11:26
kansyoukyou 发表于 2016-9-19 22:57
首先第一行输完后就出现了ArrayIndexOutOfBoundsException这个异常,第二,不明白如何只用spilt()方法就可 ...

你要按照提示的格式输入,split就是根据你给的规则拆分字符串,然后存在字符串数组里,看不懂的话可以去看源码
作者: kangnam    时间: 2016-9-20 11:28
江月念华 发表于 2016-9-19 23:34
这是什么的点招题,Android还是javaee

我这是JavaEE的,不过基础班上的都一样的。也差不多
作者: taozhihui    时间: 2016-9-20 11:41
哦哦哦哦哦
作者: lixuelin    时间: 2016-9-20 21:56
kangnam 发表于 2016-9-20 11:23
但是他要求用split,说明用字符串录入

恩,如果是强制用split的话那就说得过去了 ,今天正好学了set集合表示你在写匿名内部类的时候return num ==0? 1: num; 这里如果num ==0 表示返回1 如果不等于0表示返回num如果你返回1的话岂不是把你输入的对象放到了根的右边?又或者如果你成绩总分是相同的,那你怎么比较高低呢? 这时候你录入的数据自动放到跟的右边是什么根据?
作者: haoke    时间: 2016-9-20 22:15
看得有点晕,刚开始学习面向对象
作者: 顺其自然吧    时间: 2016-9-20 22:37
感觉几条街的差距
作者: kangnam    时间: 2016-9-20 22:43
lixuelin 发表于 2016-9-20 21:56
恩,如果是强制用split的话那就说得过去了 ,今天正好学了set集合表示你在写匿名内部类的时候return num == ...

返回0又变成1是为了一样的话,treeset里面能够存重复的值;compareTo()比较两个对象大小,返回一个整数值,如果调用字符串对象大,返回正整数,反之,返回负整数。S2大于S1的话返回num的话就说明S1在左边,小于的话也说明S2在后面,还是从大的开始;像平衡二叉树遍历有前序、中序、后序方法,返回的值顺序也会不一样。总分相同就并列,你想放语文成绩最高的,在比较器里添加条件就是
作者: Jerry007    时间: 2016-9-20 22:51
还没学到这来,感觉看不懂
作者: kangnam    时间: 2016-9-20 22:54
lixuelin 发表于 2016-9-20 21:56
恩,如果是强制用split的话那就说得过去了 ,今天正好学了set集合表示你在写匿名内部类的时候return num == ...

返回0变为1是为了TreeSet存储重复的;二叉树遍历方法有三种,前中序,你可以去看源码;总分相同你可以添加条件
作者: HermitXU    时间: 2016-9-21 07:00
学习一下!!!!!!!!!!!!!!
作者: 暮雨微凉    时间: 2016-9-21 07:28
有点难感觉
作者: HermitXU    时间: 2016-9-21 09:37
赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞!
作者: hy000936    时间: 2016-9-25 21:51
第五小题后半部分能把题写明白吗,从二个元素是什么意思?
作者: CreScert    时间: 2016-9-25 22:12
这个题还好点。有一个题是要求把性别为女的放在前面,按照分数排序呢;
作者: yinyujue    时间: 2016-9-25 22:26
来学习了 过几天学集合
作者: xguobin    时间: 2016-9-25 22:30
楼主就业班了么
作者: Zzh94520    时间: 2016-9-25 22:31
6666666666666666
作者: 叫我宁采臣    时间: 2016-9-27 09:22
学习了不错不错
作者: 叫我宁采臣    时间: 2016-9-27 11:09
你是构造方法那里还要写一个getSum()的方法吗
作者: 喝咖啡的玉米    时间: 2016-9-27 12:17
感觉这样的话,并不是很难啊
作者: kangnam    时间: 2016-9-27 22:16
叫我宁采臣 发表于 2016-9-27 11:09
你是构造方法那里还要写一个getSum()的方法吗

在实体类中定义一个方法哟..
作者: kangnam    时间: 2016-9-27 22:17
hy000936 发表于 2016-9-25 21:51
第五小题后半部分能把题写明白吗,从二个元素是什么意思?

第一个存的是姓名,不需要转成int类型
作者: kangnam    时间: 2016-9-27 22:19
喝咖啡的玉米 发表于 2016-9-27 12:17
感觉这样的话,并不是很难啊

是的,你把练习题自己敲过,能做出,就能过了,加油吧、少年
作者: zhuangshuang123    时间: 2016-9-27 23:13
谢谢分享
作者: fiendGG    时间: 2016-9-27 23:33
提前预习下~
作者: Da_xigua    时间: 2016-9-27 23:36
谢谢楼主分享




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