public static void add2q() {
System.out.print("Age:");
age = sc.nextInt();
if (!(age >= 3 && age <= 80)) {
System.out.println("Sorry you must be between the age of 3 to 80");
} else if (age >= 3 && age <= 5) {
while (true) {
System.out.println("Need to be accompanied by an adult above 16\nHave an adult to accompany?y/n");
String yn = sc.nextLine();
if (yn.equals("y")) {
System.out.print("Child's Name: ");
name = sc.nextLine();
names.add(name);
price();
addAdult();
break;
} else if (yn.equals("n")) {
while (true) {
System.out.println("Sorry you cannot take this ride");
add2q();
break;
}
} else {
System.out.println("Invalid output"); //funny problem here
}
}
} else {
System.out.print("Name: ");
name = sc.nextLine();
names.add(name);
price();
}
}
当用户键入3或4或5时,它将打印“需要...”以及“无效输出语句”,但我不想要最后一个语句。如何防止显示最后一个语句?
答案 0 :(得分:0)
如果您使用
age = sc.nextInt();
并在使用后
String yn = sc.nextLine();
这是该行的最后一行(它是“”“)
它更好用
如果您的输入是每行,则age = Integer.parseInt(sc.nextLine())
。
一个例子:
如果您的输入是
3
y
在这种情况下程序打印
"Need to be accompanied by an adult above 16\nHave an adult to accompany?y/n"
但也打印
"Invalid output"
这是因为yn的值为“enter”(如所述的Alex),并且在第二次迭代中捕获值“y”。
答案 1 :(得分:0)
sc.nextInt()
不会消耗输入中的新行字符。因此,当您键入3并按Enter键时,您的输入将为:&#34; 3 \ n&#34;但是扫描仪只能读取3.因此当你打电话时
sc.nextLine()
扫描仪将读取剩余的换行符,这会影响您的输入。您可以通过在scanner.nextInt()方法之后调用nextLine方法来解决此问题,以消耗剩余的换行符,如此
sc.nextInt();
sc.nextLine();
或者您可以遵循Fabian的建议并使用Integer.ParseInt()和sc.nextLine()