我的代码遇到了一个问题,幸运的是,我能够在这里用另一个类似的问题解决这个问题,但是我很好奇为什么会发生这种情况。
下面是我的程序的简化版本:
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? :
为什么
nextInt()
忽略n?
它不会忽略它。它只是不读取它1
实际上,nextLine
方法才是这里的异常方法。大多数next
方法通过获得下一个令牌,然后试图解析令牌工作。获取下一个令牌意味着:
- 跳过所有前导分隔符(默认为空白)
- 读取字符直到,但不包括下一个分隔符字符。
nextLine()
方法不同。它只是读取所有字符,直到并包括下一个行结束序列。
1 -…除非它是调用nextInt()
时的一个前导分隔符!