Java 在不使用读取内容的情况下调用Scanner方法是否有问题?

Java 在不使用读取内容的情况下调用Scanner方法是否有问题?,java,java.util.scanner,Java,Java.util.scanner,我最近在使用Java的扫描仪时遇到了一些问题。调用方法(如nextInt())时,按Enter键后不会使用换行符。我的解决办法是: package scannerfix; import java.util.Scanner; public class scannerFix { static Scanner input = new Scanner(System.in); public static int takeInt() { int retV

我最近在使用Java的扫描仪时遇到了一些问题。调用方法(如
nextInt()
)时,按Enter键后不会使用
换行符。我的解决办法是:

package scannerfix;

import java.util.Scanner;

public class scannerFix {
    static Scanner input = new Scanner(System.in);

    public static int takeInt() {        
        int retVal = input.nextInt();
        input.nextLine();
        return retVal;
    }

    public static void main(String[] args) {
        int num = scannerFix.takeInt();
        String word = input.nextLine();
        System.out.println("\n" + num + "\t" + word);
    }
}
它可以工作,但我的问题是:这是不是有什么不好的地方?

不会使用“回车”,因为它等于“\n”(在Windows/Linux等中)这是一个标准分隔符。您已经使用
input.nextLine()跳到下一行
所以你的解决方案很好


有关
扫描器
类的定界符如何工作的更多信息,请参见:

一个问题是它可能隐藏输入中的一些错误。如果您希望一行上有一个整数,下一行上有另一个整数,但是第一行包含“2A”,那么您将把它读为2。在某些情况下,您可能希望拒绝此输入并显示一个错误。

不,这没关系,因为这是@Tom提供的一个解决方案,谢谢,我已经修复了该值。我的项目中不会出现这种情况。我已经有了一个方法,它不断地要求一个整数,直到得到一个为止。我所要做的就是编辑它slightly@wessltov如果用户在一行中提供了多个数字呢?是否应该忽略其他数字?@Tom我使用println请求一个int,但我使用nextLine()确保没有错误发生。然后,我尝试将该输入转换为int。如果失败,它将重复此过程。@wessltov因为您希望每行只有一个数字,所以您的解决方案是正确的。您的解释有点错误。它与
\n
不是
int
无关。重要的是,它是一个标准的分隔符符号,它们不会被
nextInt()
使用。如果分隔符是
“3”
,输入是
“313”
,则
nextInt()
将返回
1
,并在流中保留第二个
3