Java出错:“缺少Return语句”

时间:2015-02-26 15:18:43

标签: java return

我为此部分代码收到了编译错误"missing return statement"。不知道为什么?我也知道这是一种低效的写作方式所以不要过于刻板:)

static int handValue(int card1, int card2){

   if((card1+card2)>=10)
     return 0;

   if((card1+card2)<=10)
     return card1+card2;

   if(card1>=10 && card2<=9 && card2>=1)
     return card2;

   if(card2>=10 && card1<=9 && card1>=1)
     return card1;

}

3 个答案:

答案 0 :(得分:4)

编译器告诉您,对于所有可能的代码路径,您没有return语句。虽然在您的情况下这是不可能的,但编译器并不是为了解决这个问题而构建的:所讨论的路径是if块中没有任何card1块被传入的值{{1 }和card2

原则上,您只需在最后添加最终return以防止警告。

static int handValue(int card1, int card2){
  if((card1+card2)>=10)
    return 0;   
  if((card1+card2)<=10)
    return card1+card2;    
  if(card1>=10 && card2<=9 && card2>=1)
    return card2;    
  if(card2>=10 && card1<=9 && card1>=1)
    return card1;
  return -1; // example return statement
}

您需要选择合适的值才能返回。另一种方法是声明该方法应始终匹配其中一个语句,然后在方法结束时为throw添加IllegalArgumentException语句,而不是&#34;默认&#34;退货声明。由于这是一个未经检查的例外,呼叫者不必遵循捕获/指定原则。

但是,对于您的代码,只有前两个if语句是可能的(总和将始终为>= 10< 10,因此您可以减少整个逻辑块;虽然我怀疑你实际上并不打算这样做,但你的方法实际上相当于:

static int handValue(int card1, int card2){
  if((card1+card2)>=10)
    return 0;   
  else // if((card1+card2)<10) <---- note '<10' not '<=10' as in your original code
    return card1+card2;
}

或只是

static int handValue(int card1, int card2) {
  return ((card1 + card2) >= 10) ? 0 : (card1 + card2);
}

答案 1 :(得分:3)

这将有效:

static int handValue(int card1, int card2){
if((card1+card2)>=10)
  return 0;

if((card1+card2)<=10)
  return card1+card2;

if(card1>=10 && card2<=9 && card2>=1)
  return card2;

if(card2>=10 && card1<=9 && card1>=1)
  return card1;

 return -1;
}

如果你定义一个返回类型,你必须在方法的每个可能路径中提供一个,或者你必须抛出这样的异常:

static int handValue(int card1, int card2){
if((card1+card2)>=10)
  return 0;

if((card1+card2)<=10)
  return card1+card2;

if(card1>=10 && card2<=9 && card2>=1)
  return card2;

if(card2>=10 && card1<=9 && card1>=1)
  return card1;

 throw new RuntimeException("no cards!!!");
}

static int handValue(int card1, int card2)throws Exception{
if((card1+card2)>=10)
  return 0;

if((card1+card2)<=10)
  return card1+card2;

if(card1>=10 && card2<=9 && card2>=1)
  return card2;

if(card2>=10 && card1<=9 && card1>=1)
  return card1;

 throw new Exception("no cards!!!");
}

答案 2 :(得分:1)

你编写函数的方式实际上保证在第一个或第二个if语句中终止,因为任何两个数字的总和大于或等于10或者它不是。然而,Java编译器不够聪明,无法弄明白,所以它告诉你如果所有if语句都失败,你应该有一个return语句。

为了修复错误,并确保实际可以达到你的第二个if语句,我会重写这样的函数:

  static int handValue(int card1, int card2) {
    if (card1 >= 10 && card2 <= 9 && card2 >= 1) {
      return card2;
    } else if (card2 >= 10 && card1 <= 9 && card1 >= 1) {
      return card1;
    } else if ((card1 + card2) <= 10) {
      return card1 + card2;
    } else {
      return 0;
    }
  }