我下面有这段代码,它一直告诉我thanksgiving() 必须返回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();
}
}
}
}
最佳答案
在此代码中:
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 block 中编写 return 语句。如果它们都不是真的怎么办?编译器不允许这样做,您应该在底部返回默认值或抛出异常。或者制作一些 if 语句 else - if 加上最后一个 else:
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 );
}
}
另外:
- 不需要将 int 转换为 int。
- 一个不相关的问题是您的代码使用了大量“魔术”数字,您需要避免使用它们。
关于java - 错误 "this method must return a result of type int"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27216354/