有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用户输入Java。当userInput是字符串而不是int时,如何生成错误消息?

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

当用户输入不是int时,我需要生成一条错误消息。例如,如果用户键入单词“8”而不是“8”,则会显示一条错误消息。我该怎么做


共 (3) 个答案

  1. # 1 楼答案

    考虑下面的代码,既保证提供了一个整数,又提示用户输入正确的输入类型。您可以扩展该类以处理其他限制(最小/最大值等)

    测试输入类

    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. # 2 楼答案

    首先,需要获取用户为“?”输入的字符串在这个问题上。如果你只是用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();
    

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

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

  3. # 3 楼答案

        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
    
        }