我在下面有这个代码,它一直告诉我,thankgiving()必须返回int的结果类型。为了确保,我已将所有结果投入使用,但似乎没有任何效果!为什么我收到此错误?
public class Thanksgiving
{
private static final int YEAR = 2000; // first valid year for this method
private static final int NOV1 = 3; // 2000/11/01 falls on a Wednesday
private static final int THURS = 4; // (Sun = 0, Mon = 1, ..., Sat = 6)
// Precondition: year > 1999
public static int thanksgiving(int year)
{
int day = firstOfMonth( year );
if ( day == THURS )
{
return (int) 22;
}
if ( day > THURS )
{
return (int) 29 - ( day - THURS );
}
if ( day < THURS )
{
return (int) 22 + ( THURS + day );
}
}
public static int firstOfMonth(int year)
{
int raw = year - 2000;
int day = NOV1;
for(int i = 0; i < raw; i++ )
{
if( i % 4 == 0 )
{
day = day + 2;
}
else
{
day++;
}
}
return day % 7;
}
public static void main(String[] args)
{
for(int year = 2000; year <= 2100; year++)
{
System.out.print("T'giving " + year + " is Nov " + thanksgiving(year) + "; ");
if (year % 3 == 1)
{
System.out.println();
}
}
}
}
答案 0 :(得分:1)
在此代码中:
public static int thanksgiving(int year)
{
int day = firstOfMonth( year );
if ( day == THURS )
{
return (int) 22;
}
if ( day > THURS )
{
return (int) 29 - ( day - THURS );
}
if ( day < THURS )
{
return (int) 22 + ( THURS + day );
}
}
你在几个if块中制作你的return语句。如果他们都不是真的怎么办?编译器不允许这样做,您应该在底部返回默认值或抛出异常。或者制作一些if语句 - 如果是最后一个:
public static int thanksgiving(int year){
int day = firstOfMonth( year );
if ( day == THURS ) {
return (22;
} else if ( day > THURS ) {
return 29 - ( day - THURS );
} else { // else without the if
// we know that ( day < THURS )
return 22 + ( THURS + day );
}
}
此外:
答案 1 :(得分:1)
问题是所有的return语句都在if语句中。如果,由于某种原因,天!=星期四,不是&lt;星期四,而不是&gt;星期四(我知道这是不可能的),然后什么也不会归还。将代码更改为具有默认返回值:
public static int thanksgiving(int year)
{
int day = firstOfMonth( year );
if ( day == THURS )
{
return (int) 22;
}
else if ( day > THURS )
{
return (int) 29 - ( day - THURS );
}
else
{
return (int) 22 + ( THURS + day );
}
}
答案 2 :(得分:0)
你需要这样的东西
public static int thanksgiving(int year)
{
int day = firstOfMonth( year );
if ( day == THURS )
{
return (int) 22;
} else if ( day > THURS )
{
return (int) 29 - ( day - THURS );
} else {
return (int) 22 + ( THURS + day );
}
}
答案 3 :(得分:0)
if
方法中有3个thanksgiving()
语句。如果没有一个条件得到满足怎么办?在那种情况下会返回什么?所以编译器抱怨。
答案 4 :(得分:0)
所有返回都在if语句中,在这种情况下,编译器会发现可能存在函数不会返回任何内容的情况。您需要在任何ifs之外或else语句中添加一个返回。
答案 5 :(得分:0)
Java编译器太愚蠢了,无法意识到在任何情况下,您的一个条件都会得到满足。它看到了if语句,并认为它们都不可能满足。您可以在方法的末尾添加一个表示错误情况的返回,您可以抛出异常,或者您可以assert false
。