public String getValue(int n)
{
if (n % ham == 0 || n % spam==0)
{
if(n % ham == 0 && n % spam == 0)
{
return "hamspam";
}
else if(n % ham == 0 && n % spam != 0)
{
return "ham";
}
else if(n % ham != 0 && n % spam==0)
{
return "spam";
}
}
else
{
return Integer.toString(n);
}
}
答案 0 :(得分:1)
从逻辑上讲,我们可以得出结论,如果n
是ham
或spam
的倍数,则n
是两者的倍数,或者恰好其中之一他们俩。我们可以在逻辑上得出结论,在外部if
内部没有办法,内部3个条件中的至少一个将是true
并且return
将被执行。
但Java编译器并不那么聪明。它只看到块中最后return
之后没有else if
,并得出结论是存在没有return
的执行路径,因此它给出了编译错误。
逻辑上,如果前两个条件是false
,则给定外if
,第三个条件必须为真。
替换
else if(n % ham != 0 && n % spam==0)
与
else
它在逻辑上是等价的,并且编译器也会满意每个执行路径都有return
语句。
答案 1 :(得分:1)
public String getValue(int n)
{
if (n % ham == 0 || n % spam==0)
{
if(n % ham == 0 && n % spam == 0)
{
return "hamspam";
}
else if(n % ham == 0 && n % spam != 0)
{
return "ham";
}
else if(n % ham != 0 && n % spam==0)
{
return "spam";
}
// this return is missing
return "something";
}
else
{
return Integer.toString(n);
}
}
答案 2 :(得分:0)
在您的第一个if
语句中,您需要else
子句或return
值。
详细说明,如果:
if (n % ham == 0 || n % spam==0) //is true
if(n % ham == 0 && n % spam == 0) // is false
{
return "hamspam";
}
else if(n % ham == 0 && n % spam != 0) //is false
{
return "ham";
}
else if(n % ham != 0 && n % spam==0)//is false
{
return "spam";
}