如果用户输入错误的数字数据,我该如何调用错误消息

时间:2015-11-03 08:27:38

标签: java swing

do {
    number = (String)JOptionPane.showInputDialog(null,"Quantity : ","TRIAL",JOptionPane.QUESTION_MESSAGE);
    if(number.matches("\\d+")) {
        qty = Integer.parseInt(number);
    }
    //    JOptionPane.showMessageDialog(null,"Invalid input !\n\nMin = 1\nMax = 100","TRIAL",JOptionPane.ERROR_MESSAGE);
} while(qty < 1 || qty > 100);
JOptionPane.showMessageDialog(null,number);

如果我将错误信息放在内部或外部,如果用户键入正确的数据,则仍会显示错误消息

3 个答案:

答案 0 :(得分:1)

如果输入与正则表达式不匹配,则需要显示消息。所以这个:

if(number.matches("\\d+")){
    qty = Integer.parseInt(number);
}
//    JOptionPane.showMessageDialog(null,"Invalid input !\n\nMin = 1\nMax = 100","TRIAL",JOptionPane.ERROR_MESSAGE);

需要成为这个:

if(number.matches("\\d+")){
    qty = Integer.parseInt(number);
} else {
    JOptionPane.showMessageDialog(null,"Invalid input !\n\nMin = 1\nMax = 100","TRIAL",JOptionPane.ERROR_MESSAGE);
}

现在你说如果匹配好,那么你会看到qty的新值,但是如果它没有,那么你就会显示消息。

您可能会考虑另一种方法,即避免使用正则表达式,但只需尝试parseInt()调用,然后捕获无法转换的NumberFormatException结果。

(如果可以解析数字,还需要一些逻辑来显示错误,但是在1到100的有效范围之外给出结果。)

答案 1 :(得分:1)

您可以将条件检查移动到循环中并将循环更改为无限:

while (true) {
    number = (String)JOptionPane.showInputDialog(null,"Quantity : ","TRIAL",JOptionPane.QUESTION_MESSAGE);
    if(number.matches("[1-9]\\d*")){
        qty = Integer.parseInt(number);

        if (qty >= 1 && qty <= 100) {
             break;
        }
    }

    JOptionPane.showMessageDialog(null, "Invalid input !\n\nMin = 1\nMax = 100", "TRIAL", JOptionPane.ERROR_MESSAGE);
}

JOptionPane.showMessageDialog(null,number);

在这种情况下,你有一个无限循环,只有当输入的值只包含数字并且它的值在[1,100]

范围内时才会中断

答案 2 :(得分:1)

  

如果用户输入错误的数字数据,如何调用错误消息

我建议为他们提供一个控件,这样可以轻松选择一个数字。具体来说,是一个带有微调数模型的微调器。像这样:

import javax.swing.*;

public class PickANumber {

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                SpinnerNumberModel spinnerModel = 
                        new SpinnerNumberModel(0, 0, 100, 1);
                JSpinner spinner = new JSpinner(spinnerModel);
                while (spinnerModel.getNumber().intValue()<1) {
                    JOptionPane.showMessageDialog(
                            null, 
                            spinner, 
                            "Pick a number between 1 & 100!", 
                            JOptionPane.QUESTION_MESSAGE);
                }
                System.out.println(
                        "Number: " + spinnerModel.getNumber().intValue());
            }
        };
        SwingUtilities.invokeLater(r);
    }
}