2014-06-13 50 views
0

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

也许你可以检查用户输入的每个值后? – Lucas

+0

这就是我想要做的,但我不熟悉try和catch语句,所以我不确定如何在第一次进行循环检查时如何做到这一点。 – user3738313

回答

2

我相信主要的问题是你有一个方法,其工作不简单和定义明确。看起来好像你有一个声明以外这个方法输入一个数字;但checkInput有两个工作:确保号码是有效的,并输入更多的号码,直到它。这有两个问题:输入的代码在两个地方被复制,并且你有一个方法,其责任不明确。

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

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

+0

感谢您的解释,我试图用一种方法做太多事情。非常明确和有用的答案! – user3738313

0

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