3 回答
TA贡献1895条经验 获得超3个赞
简而言之:
public void validate(int age) {
if (age >= 18) {
System.out.println("Valid.");
} else {
System.out.println("Not valid.");
System.out.println("Try again.");
}
}
解释:if如果年龄至少为 18 岁,第一个仅打印文本,但这与以下几行无关。那些自行行动并有两种情况:用户未满 18 岁或显示“重试”文本。
你想要做的是检查“年龄是否至少为 18 岁?” (就像你已经做的那样)然后显示“有效”或“无效”。通过将else案例添加到此检查来执行此操作,您就可以了。
编辑:else由于我理解为“我需要显示第二条消息但仅在年龄无效的情况下”的第二条评论,我将第二行附加到案例中。
TA贡献1784条经验 获得超8个赞
首先,让我们整理一些关于整数的事实。
如果整数 >= 18,则意味着它不 < 18
如果整数 < 18,则表示它不是 >= 18
任何数字都是整数,它要么 >= 18 要么 < 18。不能两者都是。两者都不是。
现在到你的代码。我可以这样写你的方法:
public void validate(int age) {
if (age >= 18) {
System.out.println("Valid.");
}
if (age < 18) {
System.out.println("Not valid.");
}
}
或更简单(基于上述事实)
public void validate(int age) {
if (age >= 18) {
System.out.println("Valid.");
} else {
System.out.println("Not valid.");
}
}
那将写Validor Not Valid。
我也可以这样写代码:
public void validate(int age) {
if (age >= 18) {
System.out.println("Valid.");
return;
}
if (age < 18) {
System.out.println("Not valid.");
} else {
System.out.println("try again.");
}
}
但else由于上述有关数字的事实,该部分是多余的。请注意我是如何使用 areturn来“中断”控制流的。
您不能break在此上下文中使用语句。JLS 14.15中的 Java 语言规范声明
对于未标记的break语句:
“如果直接封闭的方法、构造函数或初始化程序中没有 switch、while、do 或 for 语句包含 break 语句,则会发生编译时错误。”
我们这里没有switch, while,do或for声明。
JLS 说,对于有标签的休息时间。
" break 语句必须引用直接封闭的方法、构造函数、初始化程序或 lambda 主体中的标签。没有非局部跳转。如果在立即封闭的方法、构造函数、初始化程序中没有以标识符作为其标签的标记语句,或 lambda 主体包含 break 语句,发生编译时错误。 ”
...所以我想可以这样写:
public void validate(int age) {
label: {
if (age >= 18) {
System.out.println("Valid.");
break label;
}
if (age < 18) {
System.out.println("Not valid.");
} else {
System.out.println("try again.");
}
}
}
但坦率地说,这太可怕了。
TA贡献2080条经验 获得超4个赞
public void validate(int age) {
if (age >= 18) {
System.out.println("Valid.");
} else if (age < 18) {
System.out.println("Not valid.");
} else {
System.out.println("try again.");
}
}
public static void main(String[] args) {
Test t = new Test();
t.validate(18);
}
你的代码的问题是即使age>=18它仍然会检查它是否也<18,所以它总是会说什么try again时候age>=18。另外,请检查它永远不会try again用这个更正的代码说的评论,因为在任何情况下都age不会同时 <18 和 >=18
编辑我更喜欢丹尼斯的代码,因为我认为这就是你想要实现的目标。
添加回答
举报