java - 嵌套 if-else 语句的问题

标签 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);
    }

最佳答案

有趣的是,您不需要 if 语句。您可以极大地简化(并修复)您的 boolean 表达式。

首先,让我们建立 (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 也有一些想法语句也是如此,但这更多的是演示问题而不是代码问题 - 我将把它作为练习留给读者。

关于java - 嵌套 if-else 语句的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18803939/

相关文章:

java - 如何将数组字节转换为 org.w3c.dom.Document

java - Android单元测试:从使用上下文的 fragment 中调用方法

java - native 方法链接错误

java - jsp中无法连接mysql数据库

java - 对方法列表进行排序

java - 用另一个特殊字符替换特殊字符字符串

java - 在 ant 中写出文件路径属性的问题

java - Spring MVC 3 AJAX

java - Netty:在随机位置获取当前 'Channel'

java - 从不同的 XML 数据集中反序列化具有相同名称的 XML @Element 和 @ElementList