所以我有这个小方法,它接受一个整数参数并检查数组(设置为属性)是否包含某个对象。如果是,则返回该对象,否则返回null
。这里的问题是当我尝试返回某些内容时出现错误。这是:
myClass.java:33: error: missing return statement
}
^
1 error
我有一个return语句,它包含三元运算符,这意味着它不惜任何代价返回一些东西。这是我的方法:
public Banesa gjejBanese(int nrBaneses) {
for (int i = 0; i < listaBanesave.length; i++) {
return (listaBanesave[i].getNrBanesa() == nrBaneses) ? listaBanesave[i] : null;
}
}
它出了什么问题?为什么我会收到这个错误?
答案 0 :(得分:3)
采用整数参数并检查数组(设置为属性)是否包含某个对象。如果是,则返回该对象,否则返回null。
根据您的要求,您的代码应该是(例如):
public Banesa gjejBanese(int nrBaneses) {
Banesa ret;
for (int i = 0; i < listaBanesave.length; i++) {
ret = listaBansesave[i];
if (ret.getNrBanesa() == nrBaneses)
return ret;
}
// No element found or list is empty
return null;
}
使用您当前的代码:
return
(其中只有一个)答案 1 :(得分:1)
你应该在循环之外有一个return
。因为当listaBanesave
为空时,不会有return
语句 - 这会使编译器生气。
return
是您的决定。取决于您的逻辑。
答案 2 :(得分:1)
你的逻辑也是错误的。您只检查数组中的第一项是否= =您传递给函数的int。在检查第一项之后肯定有一个返回并不重要哪种情况是真的(如果或其他)并且函数结束。它是一样的:
public Banesa gjejBanese(int nrBaneses) {
return (listaBanesave[0].getNrBanesa() == nrBaneses) ? listaBanesave[i] : null;
}
它应该是:
public Banesa gjejBanese(int nrBaneses) {
for (int i = 0; i < listaBanesave.length; i++)
{
if(istaBanesave[i].getNrBanesa() == nrBaneses)
return listaBanesave[i];
}
return null;
}
答案 3 :(得分:0)
您应该返回null作为方法的最后一行,即使根据您的规范(“如果是,则返回该对象,否则返回null 。”)。
public Banesa gjejBanese(int nrBaneses) {
for (int i = 0; i < listaBanesave.length; i++) {
return (listaBanesave[i].getNrBanesa() == nrBaneses) ? listaBanesave[i] : null;
}
return null;
}
答案 4 :(得分:0)
循环中的条件有可能不满足且不会发生返回。
所以你需要有一个默认的回报。
public Banesa gjejBanese(int nrBaneses) {
for (int i = 0; i < listaBanesave.length; i++) {
return (listaBanesave[i].getNrBanesa() == nrBaneses) ? listaBanesave[i] : null;
}
return null; //when there is no chance to enter in loop.
}
答案 5 :(得分:0)
我认为您需要在listaBanesave
中循环所有项目并检查每个是否符合条件,如果没有,<{1 }}。目前,如果第一个项目不符合条件,您的代码将返回return null
- 即可将其重写为:
null
据推测,这不是你想要的。
public Banesa gjejBanese(int nrBaneses) {
if(listaBanesave.length == 0)
return null;
return (listaBanesave[0].getNrBanesa() == nrBaneses) ? listaBanesave[0] : null;
}
所以检查循环中的每个项目;如果匹配,返回它。否则,一旦循环结束,您就知道您没有匹配 - public Banesa gjejBanese(int nrBaneses) {
for (int i = 0; i < listaBanesave.length; i++) {
if (listaBanesave[i].getNrBanesa() == nrBaneses) {
return listaBanesave[i];
}
}
return null;
}
。
答案 6 :(得分:0)
根据我的评论,我更喜欢这样写:
public Banesa gjejBanese(int nrBaneses) {
Banesa found = null;
for (int i = 0; i < listaBanesave.length; i++) {
if (listaBanesave[i].getNrBanesa() == nrBaneses) { // should this be == or equals()?
found = listaBanesave[i];
break;
}
}
return found;
}
我认为它更清楚,有一个退出点(而不是for循环)。我会说?:
运算符非常有用,但它在您的方案中无法提供可读性。
另外,我已经发表评论,检查“==”是否足够测试或者#equals是否应该是用户?