用户输入验证(请帮忙)

时间:2017-10-18 18:41:50

标签: java user-input

我的程序可以选择1-5

如果有人输入像S这样的字母,代码就会中断 我怎么能阻止这个。有人可以给我代码

我添加了

if (ticket > 5) {
                JOptionPane.showMessageDialog(null, "Invalid ticket type selected (1-5)");

因此,如果用户输入6,则会因为票数大于5而给出错误 但是我怎么能用一个字母的字母来做这件事 感谢

3 个答案:

答案 0 :(得分:1)

在将其解析为int之前,您需要检查该值。在实际解析之前检查是否可以解析它。

如果您使用Integer.parseInt(value),则可能需要使用try-catch并抓住NumberFormatException。如果您到达catch - 阻止该号码无效,则无法将其解析为int。引用其documentation

  

NumberFormatException - 如果字符串不包含 可解析的整数

以下是如何做到这一点:

String valueFromUser = ...

try {
    int ticket = Integer.parseInt(valueFromUser);

    if (ticket < 1 || ticket > 5) {
        JOptionPane.showMessageDialog(null,
            "Invalid ticket type selected (1-5)");
    }

    // The rest of your code
} catch (NumberFormatException e) {
    // Ticket could not be parsed
    JOptionPane.showMessageDialog(null,
        "Invalid ticket, please input a number (1-5)");
}

如需更多检查,您可能需要查看:Determine if a String is an Integer in Java

答案 1 :(得分:0)

只需使用if语句:

if( ticket > 5 || ticket < 1){
   JOptionPane.showMessageDialog(null, "Invalid ticket type selected (1-5)");
}

然后,您可以为有效的故障单值添加else语句。

if( ticket > 5 || ticket < 1){
   JOptionPane.showMessageDialog(null, "Invalid ticket type selected (1-5)");
} else {
   //You logic goes here
}

您的代码中有基本结构,但您只需要考虑所有情况,而不是仅仅大于5的票证。

编辑: 正如其他答案所指出的,您还应该检查票证是否为int类型。这样,您可以向用户提供更具体的错误消息。

答案 2 :(得分:0)

看看这是否对您有所帮助:

    char ticket = (char) System.in.read();

    boolean isDigit = Character.isDigit(ticket);

    if (isDigit) {
        int option = Integer.parseInt(String.valueOf(ticket));

        if (option > 5 | option < 1) {
            JOptionPane.showMessageDialog(null, "Invalid ticket type selected (1-5)");
        } else {
            JOptionPane.showMessageDialog(null, "Congrats you choosen " + option);
        }
    } else {
        JOptionPane.showMessageDialog(null, "Invalid ticket type selected (1-5)");
    }