Java 无乘法、除法和位运算符的乘法,且无循环。递归 公共类多线程{ 公共静态void main(字符串[]args){ System.out.println(“8*9==”+乘法(8,9)); System.out.println(“6*0==”+乘法(6,0)); System.out.println(“0*6==”+乘法(0,6)); System.out.println(“7*-6==”+乘法(7,-6)); } 公共静态整数乘法(整数x,整数y){ int结果=0; 如果(y>0) 返回结果=(x+乘(x,(y-1)); 如果(y==0) 返回结果; if(y
我的问题很简单也很基本,为什么每次“如果”之后“返回”仍然无法通过编译,错误显示缺少返回。因为编译器无法猜测您的三个IFs是否涵盖了所有情况。 如果要简化代码,如果不需要,可以删除最后一个:Java 无乘法、除法和位运算符的乘法,且无循环。递归 公共类多线程{ 公共静态void main(字符串[]args){ System.out.println(“8*9==”+乘法(8,9)); System.out.println(“6*0==”+乘法(6,0)); System.out.println(“0*6==”+乘法(0,6)); System.out.println(“7*-6==”+乘法(7,-6)); } 公共静态整数乘法(整数x,整数y){ int结果=0; 如果(y>0) 返回结果=(x+乘(x,(y-1)); 如果(y==0) 返回结果; if(y,java,algorithm,Java,Algorithm,我的问题很简单也很基本,为什么每次“如果”之后“返回”仍然无法通过编译,错误显示缺少返回。因为编译器无法猜测您的三个IFs是否涵盖了所有情况。 如果要简化代码,如果不需要,可以删除最后一个: public class MultiplyViaRecursion{ public static void main(String[] args){ System.out.println("8 * 9 == " + multiply(8, 9)); System.
public class MultiplyViaRecursion{
public static void main(String[] args){
System.out.println("8 * 9 == " + multiply(8, 9));
System.out.println("6 * 0 == " + multiply(6, 0));
System.out.println("0 * 6 == " + multiply(0, 6));
System.out.println("7 * -6 == " + multiply(7, -6));
}
public static int multiply(int x, int y){
int result = 0;
if(y > 0)
return result = (x + multiply(x, (y-1)));
if(y == 0)
return result;
if(y < 0)
return result = -multiply(x, -y);
return result;
}
}
顺便说一下,您还可以删除result
变量:
public static int multiply(int x, int y){
int result = 0;
if(y > 0)
return result = (x + multiply(x, (y-1)));
if(y == 0)
return result;
return result = -multiply(x, -y);
}
简单地说:Java编译器没有那么聪明。它无法推断您的三个
if
语句中的一个必须计算为true。由于编译器认为所有的if
条件都有可能失败,因此它认为有可能超出if
块,此时没有return
语句
相反,尝试使用if-else
块,如下所示
public static int multiply(int x, int y){
if(y > 0)
return (x + multiply(x, (y-1)));
if(y == 0)
return 0;
return -multiply(x, -y);
}
无法重现您的问题。他发布了编译的代码;他问如果他删除了最后的
return
语句,为什么编译器会失败。
public static int multiply(int x, int y) {
int result = 0;
if (y > 0)
return result = (x + multiply(x, (y - 1)));
else if (y == 0)
return result;
else
return result = -multiply(x, -y);
}