我的扫描仪有问题。我希望程序读取字符串和整数。我有两种不同的情况。例如,我的程序要求用户输入出生年份,全名和城市。
Scanner input = new Scanner(System.in);
int year;
String name;
String city;
String state;
System.out.print("Please enter the year of birth to add: ");
year = input.nextInt();
System.out.print("Please enter full name to add: ");
name = input.nextLine();
System.out.print("Please enter a city to add: ");
city = input.nextLine();
System.out.println("Please enter the state to add: );
state = input.next();
输出:
Please enter the year of birth to add: 22
Please enter full name to add: Please enter a city to add: Denver
第一种情况是程序跳过问题并询问下一个问题。没有nextLine
,它将收到异常。
对于第二种情况,假设城市有两个或更多空间(例如旧金山,纽约市......),nextLine
是否有帮助?它似乎与第一种情况类似。我知道nextLine
将读取带空格的字符串,但是它仍会导致问题。我无法解决这个问题。
答案 0 :(得分:2)
尝试:
input.nextLine(); //this is totally useless and just eats up the rest of the line
在nextInt()之后和nextLine()之前。它有效。
<强>问题:强> 在您的代码中,它完全按照您的说法执行操作。它接受整数然后继续到nextLine()。这是相同行。 nextInt()不会自动进入下一行。因此,您可以使用nextLine()来吃掉终点线。
<强>解决方案:强> sc.nextInt()会占用整数,但不会占用新行。如果你选择下一行(与nextInt()相同),它将继续下一行的真实信息,而不是跳过一个问题。
输出:
Please enter the year of birth to add: 199
Please enter full name to add: 1234
Please enter a city to add: 1235123
Please enter the state to add: 1234123
希望这有帮助。