据我所知,我理解这个错误。我知道在我的程序中有一种情况,没有满足任何条件,计算机不知道该怎么做。话虽如此,我不确定如何在不破坏当前代码的情况下正确地修复它。我在所有if语句的末尾添加了一个返回0,这样就消除了错误,但在某些情况下,0输出了我当然不希望它输出的结果。我也试着把它放在else语句的最后,但我仍然得到相同的错误。
赋值说明如下:"如果两个参数相差小于1,则返回较小的数字;否则,从较大的参数中减去1,并在较小的参数上加1,并使结果平衡。">
我有:
public static int balance (int x, int y) {
if(x == y) {
System.out.println("The values X and Y (" + x + " and " + y + ") are already balanced; They are equal to each other!");
}
else if(Math.abs(x-y) == 1) { //Checks to see if numbers are within 1 of each other (Math.abs because negative numbers don't matter in this case)
if(x > y) {
return y;
}
else return x;
}
else if(x > y) {
x = x - 1; //X is larger so we subtract
y = y + 1; //Y is smaller so we add
return balance(x,y); //Recursion happens
}
else if(x < y) {
y = y - 1; //Y is larger so we subtract
x = x + 1; //X is smaller so we add
return balance(x,y); //Recursion happens
}
}
计算和那边的一切似乎都完全按照指令要求进行。我似乎无法摆脱"这个方法必须返回类型为">error的结果,而不需要在控制台中显示随机值。
您需要做两个更改。
-
决定在
x == y
的情况下返回什么,并将适当的return
语句添加到第一个分支 -
改变
else if (x < y) {
else {
。你知道你已经用尽了所有的可能性,但是编译器没有。这是一种可靠的方式,告诉编译器没有其他地方可以结束。
除非您做这两件事,否则编译器认为有可能在没有遇到return
语句的情况下,它可能会在方法中执行完所有行。这对于您声明为返回int
的方法无效。