Kann ich in Java Variablen innerhalb einer if-else-Abfrage verändern?

... komplette Frage anzeigen

5 Antworten

Local variable x definded in an enclosing scope must be final or effectively final.

Exakt das ist das Problem: Du hast eine lokale Variable. - Also eine Variable, die in einer deiner Methoden deklariert ist und mit dem Ende der Methode seine Gültigkeit verliert. 

Nachdem du aber einen Listener in der Methode zuweist durch Implementation einer anonymen inneren Klasse, besteht dessen Gültigkeit über diese die Methode hinaus. Demnach würdest du eine Variable aktualisieren, dessen Gültigkeit bereits erloschen ist:

Daher geht dies nicht:

private void test() {
   int x = 0;
   btnGelb.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent event) {
        x++;
      }
   }
}

Die Lösung wäre entsprechend: Die Variable als Instanz-Variable zu deklarieren:

private int x = 0;

private void test() {
btnGelb.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent event) {
x++;
}
}
}
Antwort bewerten Vielen Dank für Deine Bewertung

du kannst es noch so probieren:

x = x +1;

ansonsten, kontrollieren, dass dein int auch innerhalb der selben class steht.

public int - mal ausprobieren

Antwort bewerten Vielen Dank für Deine Bewertung

Poste doch mal deinen Code auf pastebin... 

Antwort bewerten Vielen Dank für Deine Bewertung

DIe betreffende Stelle im Code ist

 

[...]

JButton btnGelb = new JButton("GELB");

btnGelb.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent GELBKLICK) {

if (zufallszahl == 1)

 

{

System.out.println("Die PARTEI");

    x++;

} else {

System.out.println("Merkel");

 

}

}

});

btnGelb.setBounds(406, 11, 89, 23);

contentPane.add(btnGelb);

[...]

 

Davor natürlich außerhalb von geschweiften Klammern die Definierung x = 0.

Der gesamte Quellcode wäre zu lang, daher hier nur der betreffende Auszug.

Antwort bewerten Vielen Dank für Deine Bewertung