Java的。如何在userInput是字符串而不是int时发出错误消息?

时间:2014-09-06 12:22:23

标签: java user-input

我正在使用Java进行某种测试,其中给用户一个这样的问题:“4 +?= 12”。这些数字是随机的,问号也是随机的。

我需要在用户输入不是int时发出错误消息。例如,如果用户键入单词“8”而不是“8”,则会显示错误消息。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();//get the next input line
    scanner.close();
    Integer value = null;
    try
    {
        value = Integer.valueOf(input); //if value cannot be parsed, a NumberFormatException will be thrown
    }
    catch (final NumberFormatException e)
    {
        System.out.println("Please enter an integer");
    }


    if(value != null)//check if value has been parsed or not
    {
        //do something with the integer

    }

答案 1 :(得分:0)

考虑以下代码,它们都确保提供整数,并提示用户输入正确的输入类型。您可以扩展该类以处理其他限制(最小/最大值等)

TestInput类

package com.example.input;
import java.util.Scanner;
public class TestInput {
    public static void main(String[] args) {
        int n;
        Scanner myScanner = new Scanner(System.in);

        n = Interact.getInt(myScanner,"Enter value for ?", "An integer is required");
        System.out.println("Resulting input = " + n);
    }
}

互动班级

package com.example.input;
import java.util.Scanner;
public class Interact {

    public static int getInt(Scanner scanner, String promptMessage,
            String errorMessage) {
        int result = 0;

        System.out.println(promptMessage);
        boolean needInput = true;
        while (needInput) {
            String line = scanner.nextLine();
            try {
                result = Integer.parseInt(line);
                needInput = false;
            } catch (Exception e) {
                System.out.println(errorMessage);
            }
        }
        return result;
    }
}

答案 2 :(得分:0)

首先,您需要获取用户为'?'键入的字符串在问题中。如果您只使用System.inSystem.out执行此操作,则可以这样执行:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line = in.readLine();

如果你想到一个带GUI的简易版本,可以像这样使用JOptionPane

String line = JOptionPane.showInputDialog("4 + ? = 12");

否则,如果你有一个真正的GUI,你可以从JTextField或类似的地方读取用户的输入:

String line = textField.getText();

(在这种情况下,您还可以使用JFormattedTextField过滤整数的输入。这将检查输入是否为整数或不必要。)


现在,您需要将字符串解析为int

int value;
try
{
    value = Integer.parseInt(line);
}
catch (NumberFormatException nfe)
{
    // the user didn't enter an Integer
}
doSomethingWith(value);

catch - 块的内容与您上面的变体不同。如果您使用System.inSystem.out取得第一个,您可以写下这样的内容:

System.out.println("Your input is not an Integer! Please try again");

如果您使用JOptionPane版本,您可以写下这样的内容:

JOptionPane.showMessageDialog(null, "Your input is not an Integer! Please try again");

否则,你需要JLabel,因为女巫最初没有内容。现在,将其设置为文本3秒:

errorLabel.setText("Your input is not an Integer! Please try again");
new Thread(() ->
{
    try { Thread.sleep(3000); } // sleep 3 sec
    catch (InterruptedException ie) {} // unable to sleep 3 sec
    errorLabel.setText("");
}).start();

请注意,最后一个版本也与第二个版本兼容。

现在,您应该生成一个新问题,或重复读取/解析过程,直到用户输入整数。