首先,让我们整理一些关于整数的事实。
如果整数 >= 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.");
}
}
}
但坦率地说,这太可怕了。