2017-03-11 31 views
0

當多次調用方法時,我希望稱爲「number」的變量保持相同的值。它似乎在每個方法調用之間重置。我不明白爲什麼會這樣,因爲變量是在方法之外聲明的。java - 在多個方法調用時使變量持久化

這是第一類:

import java.util.Scanner; 

public class Input { 

    public static void main(String[] args) { 

     for(int counter = 0; counter < 5; counter++) { 
      Output display = new Output(); 
      display.outputNumber(); 
     } 

    } 

} 

這是第二類:

public class Output { 

    int number; 

    public void outputNumber() { 
     number++; 
     System.out.println(number); 
    } 

} 

當運行此,它輸出

1 
1 
1 
1 
1 

我希望它輸出:

1 
2 
3 
4 
5 
+1

然後,不要在每次迭代中創建一個新的Output對象。在循環之前創建一次,並重新使用它。 –

回答

2

移動此行代碼:Output display = new Output();以外的循環應該給你所需的輸出。

每次創建新對象時,該對象的編號都將初始化爲0,這將解釋您當前的輸出。 重用對象重用次數,因此您可以得到所需的輸出。

1

每次創建new Output()時,都會創建一個從頭開始的新對象。在這種情況下,您正在創建5個新對象,每個對象只增加一次,並獲得一系列1。

您可能希望在循環外部創建一個單獨的Output,然後在循環內簡單地進行增量。這樣它就是同一個對象,因此這些值得以維持。是越來越每個迴路形成

+0

很好的解釋,謝謝! – Mikkel

0

Output對象和Output類的number變量總是實例化的0默認int值。因此,每次它將0增加到1並僅顯示1

您可以刪除在Output類中增加的number變量,並在實際類中執行增量並將該值傳遞給Output類。

public class Output { 
    int number; 
    public Output (int number) { 
     this.number = number; 
    } 
    public void outputNumber() { 
     System.out.println(number); 
    } 
} 

,因此,在Output類從for循環中Input類改變你的電話也是如此。

您也可能希望將for循環counter變量instantion從0更改爲1,改變條件檢查<=5,而不是<5