Kann ich in Java Variablen innerhalb einer if-else-Abfrage verändern?
Hallo,
habe folgendes Problem: Möchte in Java ganz einfach einen int-Wert in einer if-Abfrage erhöhen. Gebe dafür einfach x++; ein. Dann steht bei den Fehlermeldungen:
Local variable x definded in an enclosing scope must be final or effectively final.
Keine Angst habe natürlich ganz klassisch die int-Variable erstellt :D.
Was soll ich machen, geht es überhaupt und welche Alternativen gibt es?
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++;
}
}
}
du kannst es noch so probieren:
x = x +1;
ansonsten, kontrollieren, dass dein int auch innerhalb der selben class steht.
public int - mal ausprobieren
Hier hat jemand anscheinend das gleiche Problem wie du, die Lösung sieht so auch ganz in Ordnung aus.
http://stackoverflow.com/questions/25894509/problems-with-local-variable-scope-how-to-solve-it
Der Fehler ist, dass x ausserhalb des ActionListeners definiert ist.
Poste doch mal deinen Code auf pastebin...
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.