我正在做關於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