错误:缺少return语句(再次)

时间:2015-11-24 19:03:02

标签: java

  public static int salariDepart1( int duradaPeriode, int horesEfectives, float preuHora, int bonificHoresExtres) {
    int salary;

    if(duradaPeriode<0||horesEfectives<0||preuHora<0||bonificHoresExtres<0){
      return (int) -1;
    }

    else if(horesEfectives<(duradaPeriode-(duradaPeriode*0.75))){
      if(preuHora<6){
        salary =  (int) (preuHora * horesEfectives);
        return (int) Math.round(salary);
      }

      else{
        salary = (int) (horesEfectives * (preuHora-(preuHora*0.10)));
        return (int) Math.round(salary);
      }
    }


    else if(horesEfectives>(duradaPeriode+(duradaPeriode*0.20))){
      bonificHoresExtres = (int) (preuHora+(preuHora*0.03));
      if(bonificHoresExtres>200){
        return (int) -2; 
      }

      else if(bonificHoresExtres<200){
        salary = (int) (horesEfectives * (preuHora+(preuHora*0.03)));
        return (int) Math.round(salary);
      }

      else{
        salary  =  (int) (horesEfectives * preuHora);
        return (int) Math.round(salary);
      } 
    }
  }

  public static void main(String[] args){

    System.out.println(salariDepart1(200,120,8,5));
    System.out.println(salariDepart1(190,100,7,10));
    System.out.println(salariDepart1(180,90,7,20));

  }
}

此错误不断弹出,我不知道为什么。感谢帮助。 :)

4 个答案:

答案 0 :(得分:1)

没有其他路径
else if(horesEfectives>(duradaPeriode+(duradaPeriode*0.20))){

因此,如果不满足该条件,编译器需要一个缺少的return语句。

一般来说,应该避免使用多个return语句,相反,最好引入一个returnValue变量,该变量在开始时就是inizialize。这改善了调试代码的能力。

int retVal = -1;

并在每个条件中指定retVal, 例如: ..

 retVal =  Math.round(salary);

..  最后将值作为最后一行返回

   return retVal;

答案 1 :(得分:1)

如果您一致且清楚地缩进代码,原因会更清楚:

public static int salariDepart1(int duradaPeriode, int horesEfectives, float preuHora, int bonificHoresExtres) {
    int salary;

    if (duradaPeriode < 0 || horesEfectives < 0 || preuHora < 0 || bonificHoresExtres < 0) {
        return (int) - 1;
    } else if (horesEfectives < (duradaPeriode - (duradaPeriode * 0.75))) {
        if (preuHora < 6) {
            salary = (int)(preuHora * horesEfectives);
            return (int) Math.round(salary);
        } else {
            salary = (int)(horesEfectives * (preuHora - (preuHora * 0.10)));
            return (int) Math.round(salary);
        }
    } else if (horesEfectives > (duradaPeriode + (duradaPeriode * 0.20))) {
        bonificHoresExtres = (int)(preuHora + (preuHora * 0.03));
        if (bonificHoresExtres > 200) {
            return (int) - 2;
        } else if (bonificHoresExtres < 200) {
            salary = (int)(horesEfectives * (preuHora + (preuHora * 0.03)));
            return (int) Math.round(salary);
        } else {
            salary = (int)(horesEfectives * preuHora);
            return (int) Math.round(salary);
        }
    }
}

如果duradaPeriode>= 0,但horesEfectives < (duradaPeriode - (duradaPeriode * 0.75)) horesEfectives > (duradaPeriode + (duradaPeriode * 0.20))都不属实,该怎么办?这是代码没有返回值的路径。因此,通过代码的路径没有return

即使这些条件都是相互排斥的,编译器也不能总是知道它们是真的(如果我们认为不是上面的情况),那么最后{{1只是一个else if。如果他们不是,那就是你的问题,在这种情况下你需要else

答案 2 :(得分:0)

设置在没有使用任何条件return语句时返回的默认值。

所以加入 return -1 例如在函数结束时将解决此问题

答案 3 :(得分:0)

并非逻辑中的所有代码路径都会遇到return语句。因此,你错过了一个。

你的结构看起来基本上是这样的:

if (something) {
  if (something) {
    return;
  } else {
    return;
  }
} else if (something) {
  if (something) {
    return;
  } else {
    return;
  }
}

你的&#34;内心&#34;条件很好,但看看&#34;外部&#34;之一:

if (something) {
  // every path in here returns
} else if (something) {
  // and every path in here returns
}

如果&#34;外部&#34;的 怎么办?条件是真的吗?找不到return语句。

else添加到&#34;外部&#34;条件为return或在整个条件块后添加return通过方法的每个可能的逻辑路径必须返回一些内容。