我有一个方法用于验证程序中用户输入的值。每当用户将一个字符串输入到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;
}
答案 0 :(得分:2)
我认为主要的问题是你有一个方法,其工作既不简单又定义明确。看起来你有一个语句 outside 这个方法输入一个数字;但checkInput
有两个工作:确保数字有效,并输入更多数字,直到它为止。这有两个方面的问题:输入的代码在两个地方重复,并且您有一个方法,其责任不明确。
相反,尝试编写一个只检查输入是否有效的方法,然后返回true
或false
。我将名称更改为isValidInput
。然后,呼叫者将有一个循环来执行输入,确保它有效,如果不是,则返回。
通常我不会通过指出你设计中的缺陷来回答这样的问题。但我想在这种情况下,如果你重新考虑你的设计,你的问题就会自行解决。 (当你正确地设计东西时,情况经常发生 - 事情就会到位。)
答案 1 :(得分:0)
如果输入不正确,checkInput()函数应抛出自己的异常。将代码拆分为验证器和解析器将导致解析输入两次。