Java 嵌套if-else语句有问题

Java 嵌套if-else语句有问题,java,Java,我在嵌套一些if-else语句时遇到了问题,至少我认为这就是问题所在。为了弄清楚这段代码,我已经修改了好几次,所以我决定把它恢复到原来的状态,并寻求一些帮助。要求用户输入3到15之间的奇数。我需要验证输入,如果输入不在3到15之间,则输出错误消息。如果不是奇数,则需要输出不同的数。运行下面的代码时,如果输入偶数、字母或数字15,则会收到两条错误消息。如果输入是3到15之间的奇数,则工作正常。我知道我必须区分这两个错误,只是没有弄清楚如何做到这一点,并使代码正常运行/工作。如果运气不好,也尝试过其

我在嵌套一些if-else语句时遇到了问题,至少我认为这就是问题所在。为了弄清楚这段代码,我已经修改了好几次,所以我决定把它恢复到原来的状态,并寻求一些帮助。要求用户输入3到15之间的奇数。我需要验证输入,如果输入不在3到15之间,则输出错误消息。如果不是奇数,则需要输出不同的数。运行下面的代码时,如果输入偶数、字母或数字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);
    }
publicstaticvoidmain(字符串[]args){
//声明变量
字符串输入字符串;
布尔完成=假;
int numRows=0;
//提示用户输入
做
{
inputString=JOptionPane
.showInputDialog(“输入行数(3到15之间的奇数):”;
//验证输入
尝试
{
numRows=Integer.parseInt(inputString);
}
捕获(数字格式)
{
完成=正确;
}
if(numRows%2==0)//验证输入是奇数
完成=正确;
如果((numRows<3)|(numRows>15))//验证输入介于3和15之间
完成=正确;
其他的
完成=错误;
如果(完成)
showMessageDialog(null,“错误,不是奇数。请重新输入3到15之间的奇数”,
“错误”,作业窗格。错误消息);
如果(完成)
JOptionPane.showMessageDialog(null,“错误,数字不在3和15之间。请重新输入3和15之间的奇数”,
“错误”,作业窗格。错误消息);
}
当(完成)时;
}

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

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

要解决这个问题,你需要翻转你的不等式


现在您有了
(numRows>=3)和&(numRows),有趣的是,您不需要if语句。您可以大大简化(并修复)布尔表达式

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

要解决这个问题,你需要翻转你的不等式


您现在有了
(numRows>=3)和&(numRows与if/else一起使用花括号,使您的生活更轻松。
if((numRows<3)| |(numRows>15))//验证输入值介于3和15之间,这与注释所说的相反。我不明白为什么在显式打印两条消息时,
done
为真。@Jsdodgers这是我的问题。我尝试将它们分开,但没有任何运气。我结束了返回原始版本的过程请求帮助时,请输入代码。@Ireder,看到并修复了此问题。将大括号与if/else一起使用,使您的生活更轻松。
if((numRows<3)|(numRows>15))//验证输入值介于3和15之间,这与注释所说的相反。我不明白为什么在显式打印两条消息时,
done
为真。@Jsdodgers这是我的问题。我尝试将它们分开,但没有任何运气。我结束了返回原始版本的过程l在请求帮助时编写代码。@Ireeder,看到并修复了这些错误。如果我将它们组合在一起,如何为两个不同的错误获取单独的错误消息?这是我的问题。我可以将它们全部打包成一条错误消息,但我必须根据错误的不同获得不同的错误消息。如果它是单独的错误消息,则您有单独的bool是指控制每一项。
done
有点泛化和过度使用,因此如果你有
isEven
isBounded
,那么这将为你提供你所需要的。你会根据你的条件分配你的变量。如果我合并它们,我如何获得两个不同错误的单独错误消息?这是我的问题。我可以把它全部打包成一个错误消息,但是我必须根据错误有不同的错误消息。如果它是一个单独的错误消息,那么你有单独的布尔函数来控制每个错误消息。
done
有点泛化和过度使用,所以如果你有
isEven
isBounded
,那么你就可以得到你想要的你应该根据你的条件分配你的变量。
 done = (numRows % 2 == 0) || ((numRows >= 3) && (numRows <= 15));