我遇到了嵌套一些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);
}
答案 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
声明为好,但更是一个呈现的问题不是一个代码问题的 - 我会离开,作为一个练习留给读者