Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 持续验证整数_Java_Swing_Validation - Fatal编程技术网

Java 持续验证整数

Java 持续验证整数,java,swing,validation,Java,Swing,Validation,我有一种方法用来验证程序中用户输入的值。每当用户向JOptionPane输入字符串时,我调用此方法并传入输入的字符串,加上我需要他们输入的最大值和最小值。首先,我通过尝试解析输入字符串并捕获异常来检查输入是否为整数,然后检查整数是否在最小值和最大值之间。我的问题是,如果用户在收到提示后输入了另一个不正确的非整数值,我不知道如何检查新值是否正确。这是方法,有人能帮忙吗 int checkInput(String input, int min, int max) { Boolean

我有一种方法用来验证程序中用户输入的值。每当用户向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;
    }
int checkInput(字符串输入,int最小值,int最大值){
布尔isInteger=false;
Boolean inputAccepted=false;
int userInput=0;//将稍后设置
而(!isInteger){
尝试
{
userInput=Integer.parseInt(输入);
}
捕获(数字格式)
{
userInput=Integer.parseInt(JOptionPane.showInputDialog(“请只输入“+min+”和“+max+”之间的整数”);
isInteger=true;//这里的问题是,它假设用户在收到提示后输入了正确的值……如果他们输入了另一个不正确的值怎么办?
}
}
而(!inputAccepted){
如果(用户输入<最小值| |用户输入>最大值)
{
userInput=Integer.parseInt(JOptionPane.showInputDialog(“请只输入“+min+”和“+max+”之间的整数”);
}
其他的
{
inputAccepted=true;
}
}
返回用户输入;
}

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

相反,请尝试编写一个只检查输入是否有效的方法,并返回
true
false
。我想把名字改成
isValidInput
。然后调用方将有一个循环来执行输入,确保输入有效,如果无效则返回


通常我不会通过指出你设计中的缺陷来回答这样的问题。但我认为,在这种情况下,如果你重新思考你的设计,你的问题会自己回答。(当您正确地设计事物时,通常会出现这种情况,因为事物会就位。)

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

也许您可以在用户输入每个值后进行检查?这正是我试图做的,但我不熟悉try-and-catch语句,因此我不确定在第一次进行循环检查时如何进行检查。感谢您的解释,我试图用一种方法做太多的事情。非常清楚和有用的答案!