public double getWeight(boolean isMetric) {
// your code here
if(isMetric = true) {
return kg;
} else if(isMetric = false)
return lb;
}
我知道每个可能的结果都需要一个return语句,但是因为这是一个布尔参数,这是否意味着我只需要两个return语句?我尝试在最后一行添加“返回null”,但这只会导致“类型非法开始”错误。
public User(String firstName, String lastName, double weight, double height) {
first = firstName;
last = lastName;
kg = weight;
cm = height;
}
public User(String firstName, String lastName, double weight, double height, boolean isMetric) {
// your code here
first = firstName;
last = lastName;
lb = weight;
in = height;
isMetric = false;
}
这些是与所讨论方法相关的构造函数。
答案 0 :(得分:1)
这里:
if(isMetric = true) {
那是分配,而不是条件(=与==)。
因此,您的“检查”可以归结为:
if (true) { ... return
和结束}之后的所有内容均为无效代码。
换句话说:编译器认识到您的代码将允许返回kg,因此else-if永远不会执行,因此编译器告诉您似乎有问题。
答案 1 :(得分:1)
首先在条件内部使用==而不是=
if(isMetric == true) {
}
现在,由于if / else if条件的计算结果为布尔值,因此您可以将代码重新执行以下操作:
if(isMetric) {
...
}
此外,确实所有方法分支都应该返回一个值(并且Java没有“优化”来检查else if
是否包含布尔表达式的条件。
相反,您可以使用以下等效的构造:
public double getWeight(boolean isMetric) {
// your code here
if(isMetric) {
return kg;
} else {
return lb;
}
}
答案 2 :(得分:0)
我将简化您的以下操作:
public double getWeight(boolean isMetric) {
if (isMetric) {
return kg;
}
return lb;
}
getWeight方法存在几个主要问题。 if(isMetric = true)
将isMetric分配为true,而不是将其与true进行比较(=
用于分配,==
用于检查相等性)。它抱怨说缺少返回,因为您的上一条语句处于不必要的条件(else if(isMetric = false)
)中,在该条件中存在隐式else
而没有返回。