错误“此方法必须返回int类型的结果”?

我在下面有这个代码,它一直告诉我,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(); } } } 

}

在这段代码中:

 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语句。 如果他们都不是真的怎么办? 编译器不允许这样做,您应该在底部返回默认值或抛出exception。 或者做一些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 ); } } 

也:

  • 不需要将int转换为int。
  • 一个不相关的问题是你的代码使用了很多“魔法”数字,你会想避免使用它们。

问题是你的所有return语句都在if语句中。 如果,由于某种原因,天!=星期四,不是<星期四,而不是>星期四(我知道这是不可能的),那么什么都不会被退回。 将代码更改为具有默认返回值:

 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 ); } } 

你需要这样的东西

 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 ); } } 

thanksgiving()方法中有3个if语句。 如果没有一个条件得到满足怎么办? 在那种情况下会有什么回报? 所以编译器抱怨。

所有返回都在if语句中,在这种情况下,编译器会发现可能存在函数不返回任何内容的情况。 您需要在任何ifs之外或else语句中添加一个返回。

Java编译器太愚蠢了,没有意识到在任何情况下,你的一个条件都会得到满足。 它看到if语句并认为它们可能都不会满足。 您可以在方法的末尾添加一个返回,指示错误情况,您可以抛出exception,或者您可以assert false