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));
}
}
此错误不断弹出,我不知道为什么。感谢帮助。 :)
答案 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
。 通过方法的每个可能的逻辑路径必须返回一些内容。