如何让用户使用java中的扫描仪点击输入默认值?

时间:2009-08-24 17:29:45

标签: java

假设我想提出以下提示:

“输入迭代次数(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。

有人能指出我正确的方向吗?

2 个答案:

答案 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()