0

我在嵌套一些 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);
    }
4

1 回答 1

4

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

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

要解决这个问题,你需要扭转你的不平等。

你现在有(numRows >= 3) && (numRows <= 15). 要做到这一点,numRows必须在 3 到 15 之间,包括 3 和 15。

现在,让我们将它与奇偶校验结合起来,你会得到:

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

该语句的行为如下:

  • 要么numRows是偶数,要么
  • numRows限制在 3 到 15 之间,包括 3 和 15。

我也对您合并您的JOptionPane陈述有一些想法,但这更像是一个演示问题而不是代码问题 - 我将把它作为练习留给读者。

于 2013-09-14T16:50:08.103 回答