嵌套的if-else语句有问题

时间:2013-09-14 16:35:44

标签: java

我遇到了嵌套一些if-else语句的问题,至少我认为问题是这样。我已经多次试图弄清楚这个代码,所以我决定将它恢复到原始状态并寻求帮助。要求用户输入3到15之间的奇数。我需要验证该输入,如果它不在3到15之间,则输出错误消息。如果它不是奇数,它也需要输出不同的数字。运行下面的代码时,如果我输入偶数,字母或数字< 3或> 15,我会收到两条错误消息。如果输入是3到15之间的奇数,它可以正常工作。我知道我必须区分这两个错误,只是无法弄清楚如何做到这一点并使代码运行/正常工作。如果没有运气也尝试过。当然,这是愚蠢的事情,因为我的大多数错误似乎都是愚蠢的一面。谢谢你的帮助!

public static void main(String[] args) {

    // Declare variables
    String inputString;
    boolean done = false;
    int numRows = 0;

    // Prompt for user input  
    do
    {
        inputString = JOptionPane
            .showInputDialog("Enter number of rows (odd number between 3 and 15): ");

        // Validating input
        try
        {
            numRows = Integer.parseInt(inputString);
        }
        catch (NumberFormatException e)
        {
            done = true;
        }
        if(numRows % 2 == 0) // Validating input is an odd number
             done = true; 
        if((numRows < 3) || (numRows > 15))// Validating input is between 3 and 15
            done = true;
        else
            done = false;

        if(done)
            JOptionPane.showMessageDialog(null, "Error, not an ODD number. Re-enter odd number between 3 and 15",
                "Error", JOptionPane.ERROR_MESSAGE);    

        if(done)
            JOptionPane.showMessageDialog(null, "Error, number not between 3 and 15. Re-enter odd number between 3 and 15",
                "Error", JOptionPane.ERROR_MESSAGE);
        }
    while(done);
    }

1 个答案:

答案 0 :(得分:4)

这里有趣的是,你不需要if语句。你可以大大简化(和修复)你的布尔表达式。

首先,让我们确定(numRows < 3) || (numRows > 15)的行为。为此,numRows必须严格小于3,或严格大于15.这不验证一系列数字 - 您需要将其切换为AND语句。但即使这样做也无法验证正确的范围 - 您将验证不是在3到15之间的所有内容!

要解决这个问题,你需要改变你的不平等。

您现在拥有(numRows >= 3) && (numRows <= 15)。为此,numRows必须介于3和15之间,包括在内。

现在,让我们将它与奇数/偶数的检查结合起来,然后你就可以了:

 done = (numRows % 2 == 0) || ((numRows >= 3) && (numRows <= 15));

此声明的行为如下:

  • numRows是偶数,或
  • numRows绑定在3到15之间。

我也有一些想法你结合你的JOptionPane声明为好,但更是一个呈现的问题不是一个代码问题的 - 我会离开,作为一个练习留给读者