为什么nextInt()忽略/ n?

时间:2016-10-20 04:10:39

标签: java java.util.scanner user-input

我遇到了我的代码问题,我很幸运能够在这里解决另一个类似的问题,但我很好奇为什么会这样。

这是我的程序的简化版本:

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? :

1 个答案:

答案 0 :(得分:2)

  

nextInt()为什么忽略\ n?

它不会忽略它。它只是没有读到它 1

实际上,这里的nextLine方法是异常的。大多数next方法通过获取下一个标记然后尝试解析标记来工作。获得下一个令牌意味着:

  1. 跳过所有前导分隔符(默认情况下为空格)
  2. 读取字符,但不包括下一个分隔符。
  3. nextLine()方法不同。它只读取所有字符,包括下一行结束序列。

    1 - ...除非它是调用nextInt()时的前导分隔符之一!