不断验证整数

时间:2014-06-13 16:03:09

标签: java swing validation

我有一个方法用于验证程序中用户输入的值。每当用户将一个字符串输入到JOptionPane中时,我调用此方法并传入输入的字符串,加上我需要输入的最大值和最小值。首先,我通过尝试解析输入字符串并捕获异常来检查输入是否为整数,然后检查整数是否在最小值和最大值之间。我的问题是,如果用户在提示后输入另一个不正确的非整数值,我不知道如何检查新值是否正确。这是方法,任何人都可以帮忙吗?

int checkInput(String input, int min, int max) {
        Boolean isInteger = false;
        Boolean inputAccepted = false;
        int userInput = 0; //will be set later
        while (!isInteger) {
            try
            {
                userInput = Integer.parseInt(input);
            }
            catch (NumberFormatException e)
            {
                userInput = Integer.parseInt(JOptionPane.showInputDialog("Please enter only integers between " + min + " and "+ max + "."));
                isInteger = true; //the problem here is that it assumes the user inputted a correct value after being prompted... what if they enter another incorrect value?
            }
        }
        while (!inputAccepted) {
        if (userInput < min || userInput > max) 
        {
                userInput = Integer.parseInt(JOptionPane.showInputDialog("Please enter only integers between " + min + " and "+ max + "."));
        }
        else 
        {
            inputAccepted = true;
        }
        }
        return userInput;
    }

2 个答案:

答案 0 :(得分:2)

我认为主要的问题是你有一个方法,其工作既不简单又定义明确。看起来你有一个语句 outside 这个方法输入一个数字;但checkInput有两个工作:确保数字有效,并输入更多数字,直到它为止。这有两个方面的问题:输入的代码在两个地方重复,并且您有一个方法,其责任不明确。

相反,尝试编写一个只检查输入是否有效的方法,然后返回truefalse。我将名称更改为isValidInput。然后,呼叫者将有一个循环来执行输入,确保它有效,如果不是,则返回。

通常我不会通过指出你设计中的缺陷来回答这样的问题。但我想在这种情况下,如果你重新考虑你的设计,你的问题就会自行解决。 (当你正确地设计东西时,情况经常发生 - 事情就会到位。)

答案 1 :(得分:0)

如果输入不正确,checkInput()函数应抛出自己的异常。将代码拆分为验证器和解析器将导致解析输入两次。