这就是问题所在。
编写一个包含do / while循环的Java代码块,该代码将在一个人的出生年份读取。出生年份必须大于1900,但小于2016年,否则用户将收到错误消息。循环必须继续提示用户,直到输入有效值。
这是我的回答
private static double saveYears() {
double birthYear;
do {
try {
birthYear= Double.parseDouble(JOptionPane.showInputDialog("enter year you were born"));
}
catch (NumberFormatException e) {
birthYear= -1;
}
if (birthYear> 1990 || birthYear< 2016) {
JOptionPane.showMessageDialog(null, "Invalid number birth year.");
}
} while (birthYear<1990|| birthYear> 2016);
return birthYear;
}
这是正确答案吗?
答案 0 :(得分:3)
首先,我要假设你在if和while语句中的意思是1900而不是1990年。
你关闭了,但是如果你看看你的if和while语句,他们实际上正在测试不同的东西。如果您更改if语句以匹配while语句,那么您将是正确的。
private static double saveYears() {
double birthYear;
do {
try {
birthYear= Double.parseDouble(JOptionPane.showInputDialog("enter year you were born"));
}
catch (NumberFormatException e) {
birthYear= -1;
}
if (birthYear < 1900 || birthYear > 2016) {
JOptionPane.showMessageDialog(null, "Invalid number birth year.");
}
} while (birthYear < 1900 || birthYear > 2016);
return birthYear;
}
更新: 如果你不想在一个循环中检查出生年份两次,你也可以这样做。
private static double saveYears() {
double birthYear;
while(true) {
try {
birthYear= Double.parseDouble(JOptionPane.showInputDialog("enter year you were born"));
}
catch (NumberFormatException e) {
birthYear= -1;
}
if (birthYear >= 1900 && birthYear <= 2016) {
break;
} else {
JOptionPane.showMessageDialog(null, "Invalid number birth year.");
}
return birthYear;
}
答案 1 :(得分:0)
您的状况检查使用不当,请使用less than/greater than and =
在1990年和2016年再次循环。
while(birthYear <= 1900 || birthYear >= 2016);
并且不需要double
,使用int
这是绰绰有余并限制为4位数(根据规范1900或2016 - >不超过4位数)< / p>
答案 2 :(得分:0)
您正在使用(birthYear> 1990 || birthYear< 2016)
,这意味着,
使用运营商||
更改运营商&&
可以解决您的问题。还要考虑以下几点:
<
和>
的位置,或者应使用运营商<=
和>=
。double
出生年份?您已检查过两次相同的情况,这很容易出错。将条件减少到一个地方,如:
int birthYear = -1;
boolean isYearInvalid = true;
while (isYearInvalid) {
try {
birthYear = Integer.parseInt(JOptionPane.showInputDialog("enter year you were born"));
} catch (NumberFormatException e) {
//LOG or PRINT
}
if (birthYear > 1900 && birthYear < 2016) {
isYearInvalid = false;
} else {
JOptionPane.showMessageDialog(null, "Invalid number birth year.");
}
}