我正在做关于Ackermann函数的书练习。错误:变量可能未被初始化
虽然我有一个问题。如果我声明结果但不初始化,编译器会抱怨“变量结果可能未被初始化”。
int result;
当我将它设置为默认为0时,它不会抱怨。
int result = 0;
我认为,当一个声明类型为int的变量时,它自动默认为0。
下面是完整的代码:
public class Ackermann {
public static int ack(int m, int n) {
int result = 0;
//int result;
if (m == 0)
result = n + 1;
else if(m > 0 && n == 0)
result = ack(m-1, 1);
else if(m > 0 && n > 0)
result = ack(m-1, ack(m, n-1));
return result;
}
public static void main(String[] args) {
System.out.println(ack(3, 3));
}
}
您似乎暗示未初始化的int变量可能具有非0值。这是错误的(无论如何Java)。未被显式初始化的成员变量将始终具有值0,并且不会初始化局部变量,只会导致OP注意到的编译错误。所以不初始化当地人是不错的做法 - 这是一个编译器错误。不初始化成员可能是不好的做法,但这纯粹是一个可读性问题,与可能不是0的变量无关。 – sepp2k