我试图在Java中输入某些字符串和整数变量的值.但是如果我在整数之后输入字符串,则在控制台中只跳过字符串输入并移动到下一个输入.
这是代码
String name1;
int id1,age1;
Scanner in = new Scanner(System.in);
//I can input name if input is before all integers
System.out.println("Enter id");
id1 = in.nextInt();
System.out.println("Enter name"); //Problem here, name input gets skipped
name1 = in.nextLine();
System.out.println("Enter age");
age1 = in.nextInt();
Run Code Online (Sandbox Code Playgroud)
enr*_*cis 16
这是一个常见问题,因为该nextInt方法不会读取输入的换行符,所以当您发出命令时nextLine,扫描程序会找到换行符并将其作为一行给出.
解决方法可能是这个:
System.out.println("Enter id");
id1 = in.nextInt();
in.nextLine(); // skip the newline character
System.out.println("Enter name");
name1 = in.nextLine();
Run Code Online (Sandbox Code Playgroud)
另一种方法是始终使用nextLine包裹成Integer.parseInt:
int id1;
try {
System.out.println("Enter id");
id1 = Integer.parseInt(input.nextLine());
} catch (NumberFormatException e) {
e.printStackTrace();
}
System.out.println("Enter name");
name1 = in.nextLine();
Run Code Online (Sandbox Code Playgroud)
Scanner.next()呢?我不会使用,Scanner.next()因为这将只读取下一个标记而不是整行.例如,以下代码:
System.out("Enter name: ");
String name = in.next();
System.out(name);
Run Code Online (Sandbox Code Playgroud)
将产生:
Enter name: Mad Scientist
Mad
Run Code Online (Sandbox Code Playgroud)
它不会处理科学家,因为Mad本身已经是一个完整的令牌.因此,这可能是您的应用程序的预期行为,但它与您在问题中发布的代码具有不同的语义.
| 归档时间: |
|
| 查看次数: |
24498 次 |
| 最近记录: |