Java 在不使用读取内容的情况下调用Scanner方法是否有问题?
我最近在使用Java的扫描仪时遇到了一些问题。调用方法(如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
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
。