为什么nextInt()忽略/n



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

下面是我的程序的简化版本:

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方法通过获得下一个令牌,然后试图解析令牌工作。获取下一个令牌意味着:

  1. 跳过所有前导分隔符(默认为空白)
  2. 读取字符直到,但不包括下一个分隔符字符。

nextLine()方法不同。它只是读取所有字符,直到并包括下一个行结束序列。


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

相关内容

  • 没有找到相关文章

最新更新