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

时间:2014-11-30 17:58:23

标签: java compiler-errors

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

}

6 个答案:

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

此外:

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

答案 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