2017-03-11 3 views
0

Ich möchte die Variable namens "number" den gleichen Wert bleiben, wenn die Methode mehrmals aufgerufen wird. Es scheint, als ob es zwischen jedem Methodenaufruf zurückgesetzt wird. Ich verstehe nicht, warum das so ist, weil die Variable außerhalb der Methode deklariert wird.Java - make Variable persistent auf mehrere Methodenaufrufe

Dies ist die erste Klasse:

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(); 
     } 

    } 

} 

Dies ist die zweite Klasse ist:

public class Output { 

    int number; 

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

} 

Als ich das laufen, es gibt

1 
1 
1 
1 
1 

ich es ausgegeben werden soll:

1 
2 
3 
4 
5 
+1

Erstellen Sie dann bei jeder Iteration kein neues Output-Objekt. Erstellen Sie es einmal vor der Schleife und verwenden Sie es erneut. –

Antwort

2

Diese Codezeile verschieben: Output display = new Output(); außerhalb der Schleife sollte Ihnen die gewünschte Ausgabe geben.

Jedes Mal, wenn Sie ein neues Objekt erstellen, wird die Nummer dieses Objekts auf 0 initialisiert, was Ihre aktuelle Ausgabe erklärt. Durch die Wiederverwendung des Objekts wird die Nummer wieder verwendet und Sie erhalten die gewünschte Ausgabe.

1

Jedes Mal, wenn Sie eine new Output() erstellen, erstellen Sie ein neues Objekt, das von vorne beginnt. In diesem Fall erstellen Sie 5 neue Objekte, erhöhen jedes nur einmal und erhalten Ihre Serie von 1s.

Sie werden wahrscheinlich eine einzige Output außerhalb der Schleife erstellen und dann einfach innerhalb der Schleife erhöhen. So ist es das gleiche Objekt und die Werte bleiben erhalten.

+0

Gute Erklärung, danke! – Mikkel

0

Ihr Output Objekt wird immer für jede Schleife und die number Variable der Output Klasse wird immer instanziiert auf den Standard int Wert von 0 erstellt. Daher wird jedes Mal, wenn es 0 zu 1 erhöht und nur 1 angezeigt.

könnten Sie entweder fallen die number Variable in der Output Klasse erhöht wird und die Erhöhung in der aktuellen Klasse tun und den Wert auf die Output Klasse übergeben.

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

Und dementsprechend Ihre Anrufe auf die von der auch for Schleife in der Input Klasse Output Klasse ändern.

Sie können auch die for Schleife counter Variable instantion 0-1 ändern möchten, und die Zustandsüberprüfung statt <5-<=5 zu ändern.

Verwandte Themen