我對java(以及大多數編程語言作為一個整體)相當陌生,并且正在嘗試了解一些不熟悉的概念,其中之一就是遞回。為了測驗它,我嘗試制作它,以便數字不斷增加并顯示出來。
public static void recursionTest() {
int numb = 0;
System.out.println(numb);
numb = 1;
recursionTest();
}
我試著像這樣寫出來,但它只會不斷地列印數字 0 而不會增加。然后我嘗試在 println 之前放置,但它只產生數字 1。然后我嘗試用 while 回圈替換。
public static void recursionTest() {
int numb = 0;
System.out.println(numb);
while (numb != -1) {
numb = 1;
}
recursionTest();
}
這最終只列印出一個 0,然后我嘗試像以前一樣將它移到 println 上方,但它沒有顯示任何內容。有什么我想念的嗎?對不起,如果我的問題很愚蠢。
uj5u.com熱心網友回復:
正如您所定義的,它numb是方法范圍內的區域變數。它是在每次呼叫方法開始時使用指令創建的int numb = 0,并在結束時銷毀。每次呼叫方法(即使呼叫是遞回的)都是不同的變數。在代碼中具有相同的名稱,但它是一個不同的名稱。
為了實作計數器,您應該定義numb為類的靜態欄位或作為引數傳遞給方法。您可以執行以下操作:
選項 1(靜態欄位):
public class TheClass {
static int numb = 0;
public static void recursionTest() {
System.out.println(numb);
numb = 1;
recursionTest();
}
}
選項 2(作為引數傳遞):
public class TheClass {
public static void recursionTest(int numb) {
System.out.println(numb);
numb = 1;
recursionTest(numb);
}
}
在第二次嘗試中,您正在執行回圈System.out.println 外部while,因此您只列印一次該值。此外,由于無限 while 回圈,遞回呼叫永遠不會完成,但如果您對回圈設定限制,對同一方法的新呼叫將導致計數器被重置,原因與以前相同。
uj5u.com熱心網友回復:
您應該閱讀有關 Java 中變數的范圍和生命周期的資訊。您在函式內部宣告了一個區域變數,該變數在您撰寫時被“創建”并初始化(為 0):
int numb = 0;
此變數僅在當前函式呼叫中可見。執行函式后,變數及其值將失效并銷毀。當再次呼叫該函式時,該變數被創建并再次初始化(為 0)。
如果您的變數需要“生存”您的函式的多次呼叫,請考慮在函式之外宣告它:
private static int numb = 0;
public static void recursionTest() {
System.out.println(numb);
while (numb != -1) {
numb = 1;
}
recursionTest();
}
或者將其作為引數傳遞:
public static void main(String[] args) {
recursionTest(0);
}
public static void recursionTest(int numb) {
System.out.println(numb);
while (numb != -1) {
numb = 1;
}
recursionTest(numb);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/431334.html
