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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


//类的代码
package com.hui_extend;

public class Person {
        String name ;
        int age ;
        double score;
}



//执行代码,向数组添加对象
package com.hui_extend;

import java.util.Scanner;

public class Test {
        public static void main(String[] args) {
                Person[] p = new Person[2];
                Scanner sc = new Scanner(System.in);
                Person per = new Person();
                for (int i = 0; i < p.length; i++) {
                       
                        System.out.println("输入学生的姓名");
                        per.name = sc.nextLine();
                        System.out.println("输入学生的年龄");
                        per.age = sc.nextInt();
                        System.out.println("输入学生成绩");
                        per.score = sc.nextDouble();
                        p[i] = new Person();
                        p[i] = per;
                }
                System.out.println(p[0].name);
               
        }
}

2 个回复

倒序浏览
本帖最后由 jiubaK 于 2016-9-10 22:43 编辑

sc.nextLine();是要遇到行结束符\r\n才结束的。
per.score = sc.nextDouble();
这条语句执行后,行结束符\r\n还在缓冲区,在下次执行
per.name = sc.nextLine();
时,马上就得到行结束符了,所以达不到想要的效果。
可以先执行一次sc.nextLine();来消耗掉那个结束符。
还有下面也有问题,
p = new Person();
p[ i ] = per;
实际上,你在每个p里面都是存的per,虽然你先new Person()存入了,但是马上也覆盖了。

我根据你写的内容修改如下:
[Java] 纯文本查看 复制代码
package com.hui_extend;

import java.util.Scanner;

public class Test {
        public static void main(String[] args) {
                Person[] p = new Person[2];
                Scanner sc = new Scanner(System.in);
                for (int i = 0; i < p.length; i++) {
                        Person per = new Person();
                        System.out.println("输入学生的姓名");
                        per.name = sc.nextLine();
                        System.out.println("输入学生的年龄");
                        per.age = sc.nextInt();
                        System.out.println("输入学生成绩");
                        per.score = sc.nextDouble();
                        sc.nextLine();
                        p[ i ] = per;
                }
                System.out.println(p[0].name);
        }
}

回复 使用道具 举报 1 0
nextline的问题,后面有nextint和nextdouble,那么再次循环,nextline会吸收到上个的\r\n从而不能键盘录入,解决是,在nextdouble后加一个nextline,仅仅作为吸收用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马