我正在学习Java,我不是很了解它,我不知道为什么,但Java似乎跳过了一条线。我认为我所有页面中的代码都不是真的很糟糕,所以我会把第一页和我使用它的结果放在一起。谢谢!
import java.util.Scanner;
public class First {
public static void main(String args[]){
Scanner scanz = new Scanner(System.in);
System.out.println("Hello, please tell me your birthday!");
System.out.print("Day: ");
int dayz = scanz.nextInt();
System.out.print("Month: ");
int monthz = scanz.nextInt();
System.out.print("Year: ");
int yearz = scanz.nextInt();
System.out.println("Now, tell me your name!");
System.out.print("Name: ");
String namez = scanz.nextLine();
Time timeObject = new Time(dayz,monthz,yearz);
Second secondObject = new Second(namez,timeObject);
System.out.println("\n\n\n\n\n" + secondObject);
}
}
它跳过了
行 String namez = scanz.nextLine();
控制台输出:(原谅生日位,这是其他东西)
Hello, please tell me your birthday!
Day: 34
Month: 234
Year: 43
Now, tell me your name!
Name:
My name is and my birthday is 00/00/43
它没有给你机会给出一个名字,它只是直接跳过并取名为null。如果有人能,请告诉我原因!我想学习Java,这种小烦恼阻碍了我。
谢谢!
答案 0 :(得分:4)
问题是nextLine获取了该行的任何字符,并且\ n(换行符)从上面的扫描仪输入中遗留下来。
因此,不是让你输入新内容,而是将\ n作为输入并继续。
要修复,只需将两个扫描仪背对背,如下所示:
System.out.print("Name: ");
scanz.nextLine();
String namez = scanz.nextLine();
只需使用:
String namez = scanz.next();
也会起作用,但会将名称限制为一个单词。 (仅限名字)
答案 1 :(得分:2)
我认为nextLine
的预期用途是正确的。但问题是nextInt
不会创建换行符号,而是读取该行的其余部分(为空)。我相信如果在此之后添加另一个nextLine
语句,代码将起作用。另一方面,接下来只识别第一个单词,这可能不是正确的解决方案。