我试图在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();
答案 0 :(得分:14)
这是一个常见问题,因为nextInt
方法无法读取输入的换行符,所以当您发出命令nextLine
时,扫描程序会找到换行符字符,并将其作为一条线。
解决方法可能是这个:
System.out.println("Enter id");
id1 = in.nextInt();
in.nextLine(); // skip the newline character
System.out.println("Enter name");
name1 = in.nextLine();
另一种方法是始终将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();
Scanner.next()
?我不会使用Scanner.next()
因为这只会读取下一个标记而不是整行。例如,以下代码:
System.out("Enter name: ");
String name = in.next();
System.out(name);
将产生:
Enter name: Mad Scientist
Mad
它不会处理科学家,因为 Mad 本身已经是一个完整的令牌。 因此,这可能是您的应用程序的预期行为,但它与您在问题中发布的代码具有不同的语义。
答案 1 :(得分:2)
这是您更新的工作代码。
package myPackage;
import java.util.Scanner;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
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.next();
System.out.println("Enter age");
age1 = in.nextInt();
}
}
答案 2 :(得分:1)
可能是你这样试试..
而不是这段代码
System.out.println("Enter name"); //Problem here, name input gets skipped
name1 = in.nextLine();
试试这个
System.out.println("Enter name");
name1 = in.next();