想象一下下面的scanario:我有一个程序,要求输入一个整数,然后输入一个字符串。
int age=0;
String name;
Scanner sc = new Scanner(System.in);
System.out.print("Enter Age: ");
age = sc.nextInt();
System.out.print("Enter Name: ");
name= sc.nextLine();
有了aobe代码,我没有机会输入名字。所以通常我会声明2个scanner对象如下:
int age=0;
String name;
Scanner sc = new Scanner(System.in);
Scanner sc2 = new Scanner(System.in); //2nd Scanner object
System.out.print("Enter Age: ");
age = sc.nextInt();
System.out.print("Enter Name: ");
name= sc2.nextLine(); //Using 2nd Scanner Object
**我的问题是:**是否需要声明多个scanner对象来接受不同类型的输入??我做的正确吗?
这个问题我已经想了很多年了。(SO中的几个问题提到了多个扫描仪,但他们的问题只使用了一个扫描仪对象,所以我今天问这个问题。
7条答案
按热度按时间vnjpjtjt1#
@skiwi关于只使用一个
Scanner
是正确的,所以你这样做是正确的。它不起作用的原因是nextInt()
消耗构成整数的所有字符,但它不接触行尾字符。因此,当调用nextLine()
时,它看到行尾字符之前没有字符,因此它认为输入了一个空行,并返回一个空String。但是,nextLine()
确实会使用行尾字符,因此如果在执行name = sc.nextLine();
之前调用sc.nextLine();
一次,它应该可以工作。nxowjjhe2#
您没有机会输入名称,因为
nextInt()
不会读取换行符'\n'
(由用户在按Enter键后输入),而nextLine()
会。所以只要你调用name = sc.nextLine();
,它就会读取nextInt()
还没有读取的'\n'
字符。绝对不要创建一个新的扫描仪,如果扫描仪,如果你扫描同样的东西(如
System.in
)-只有改变扫描仪,如果你扫描别的东西,如不同的文件或东西。要使代码正常工作(只有一个Scanner示例),请使用以下命令:
输入/输出示例:
aydmsdu93#
对于要扫描的每个对象,您只能使用一个
Scanner
示例。在这种情况下,您正在从System.in
阅读,因此在同一台扫描仪上同时打开两台扫描仪甚至没有意义。所以你肯定想用你的第一个选择,那么问题来了,它有什么问题:
你需要
sc.nextInt()
,一个整数,名字很少是整数。您最有可能查找的是一个单词的name = sc.next()
或整个句子的name = sc.nextLine()
(直到按下回车键)。还要注意,在
sc.nextInt()
之后,实际上在任何sc.next***()
之后,您需要**按Enter。noj0wjuj4#
您还可以用途:
tyg4sfes5#
这必须完美地工作。我测试过了。
rjjhvcjd6#
为什么这个代码不工作?
输出为:
输入学生ID:10
输入学生姓名:进入学生班级:
avkwfej47#