我遇到了我的代码问题,我很幸运能够在这里解决另一个类似的问题,但我很好奇为什么会这样。
这是我的程序的简化版本:
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String input = scan.nextLine();
while(!input.equals("x")){
if(input.equals("m")){
String temp = scan.nextLine();
String entry = scan.nextLine();
}
else if(input.equals("f")){
String color = scan.nextLine();
int nothing = scan.nextInt();
}
System.out.println("Enter 'm' for mascara, 'f' for foundation, 'x' to exit");
System.out.println("Entry? :");
input = scan.nextLine();
}
}
使用此代码,输入' m'不会给我任何问题,但是' f'会让我打印两行两行。为什么nextInt()而不是nextLine()会发生这种情况呢?
'm'
Enter 'm' for mascara, 'f' for foundation, 'x' to exit
Entry? :
'f'
Enter 'm' for mascara, 'f' for foundation, 'x' to exit
Entry? :
Enter 'm' for mascara, 'f' for foundation, 'x' to exit
Entry? :
答案 0 :(得分:2)
nextInt()
为什么忽略\ n?
它不会忽略它。它只是没有读到它 1 。
实际上,这里的nextLine
方法是异常的。大多数next
方法通过获取下一个标记然后尝试解析标记来工作。获得下一个令牌意味着:
nextLine()
方法不同。它只读取所有字符,包括下一行结束序列。
1 - ...除非它是调用nextInt()
时的前导分隔符之一!