假设我想提出以下提示:
“输入迭代次数(400):”
其中,用户可以输入一个整数或只需按Enter键,默认值为400。
如何使用Scanner类在Java中实现默认值?
public static void main(String args)
{
Scanner input = new Scanner(System.in);
System.out.print("Enter the number of iterations (400): ");
input.nextInt();
}
正如你所看到的,我必须有“nextInt()”,我怎么能做类似“nextInt或return?”的事情,在这种情况下如果它是一个返回我将默认值为400。
有人能指出我正确的方向吗?
答案 0 :(得分:3)
我同意@pjp直接回答你关于如何调整扫描仪的问题(我给了他一个向上投票),但如果你只是从stdin中读取一个值,我会得到使用Scanner的印象有点矫枉过正。扫描仪让我觉得你更想要用来读取一系列输入(如果这就是你正在做的事情,我的道歉),但另外为什么不直接读取stdin?虽然现在我看着它,但它有点冗长;)
您也应该比我更好地处理IOException ...
public static void main(String[] args) throws IOException
{
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter the number of iterations (400): ");
int iterations = 400;
String userInput = input.readLine();
//if the user entered non-whitespace characters then
//actually parse their input
if(!"".equals(userInput.trim()))
{
try
{
iterations = Integer.parseInt(userInput);
}
catch(NumberFormatException nfe)
{
//notify user their input sucks ;)
}
}
System.out.println("Iterations = " + iterations);
}
答案 1 :(得分:2)
正如我们之前发现的,Scanner不会将新行视为令牌。为了解决这个问题,我们可以调用nextLine
然后使用正则表达式匹配它。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int val = 400;
String line = scanner.nextLine();
if (line.matches("\\d+")) {
Integer val2 = Integer.valueOf(line);
val=val2;
}
System.out.println(val);
}
这种方式使扫描仪变得多余。你也可以打电话给input.readLine()
。