【问题标题】:Continually Validating Integers持续验证整数
【发布时间】:2014-06-13 16:03:08
【问题描述】:

我有一个方法用来验证程序中用户输入的值。每当用户将字符串输入到 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;
    }

【问题讨论】:

  • 也许您可以在用户输入每个值后进行检查?
  • 这就是我想要做的,但我不熟悉 try 和 catch 语句,所以我不确定如何在第一次进行循环检查的同时做到这一点。跨度>

标签: java swing validation


【解决方案1】:

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

请尝试编写一个仅检查输入是否有效并返回truefalse 的方法。我会将名称更改为isValidInput。然后调用者会有一个循环来执行输入,确保它是有效的,如果不是就返回。

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

【讨论】:

  • 感谢您的解释,我试图用一种方法做太多事情。非常清晰和有用的答案!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 2016-08-04
    相关资源
    最近更新 更多