Probleme mit lokalen Variabeln

Status
Nicht offen für weitere Antworten.

bristtote

Aktives Mitglied
Hallo Leute,

Der Folgende Code ist für ein Applet geschrieben und somit innerhalb der Init-Methode realisiert.

Code:
for ( int i=0; i<choices.length; i++) {
choices[i].addItemListener(new ItemListener(){ 
  public void itemStateChanged(ItemEvent e) {
    aendere( choices[i], e.getItem() );
    
  }
}); 
	} 
	}


Hierbei taucht dann der Folgende Fehler auf:

Code:
D:.....................\itemalsfunk.java:72: local variable i is accessed from within inner class; needs to be declared final
    aendere( choices[i], e.getItem() );
                               ^

Naja, aber als final soll es ja garnicht deklariert werden.

Danke schon Mal für Eure Hilfe
 
Sowas müsste gehen. Du kannst von einer anonymen Klasse aus nicht auf Variablen der umgebenden Methoden zugreiffen. Auf Konstanten (final!) hingegen schon.
Code:
for ( int i=0; i<choices.length; i++) {

  final int index = i;

  choices[i].addItemListener(new ItemListener(){
    public void itemStateChanged(ItemEvent e) {
      aendere( choices[index], e.getItem() );
    }
  });
}
 
Vielen Dank Beni,

es hat geklappt.

Aber, ich habe jetzt ein anderes Problem. Vielleicht kannst Du mir auch hier helfen.
Und zwar möchte ich gerne jetzt natürlich die beiden Parameter
Code:
 choices[index], e.getItem()
meiner Methode übergeben um sie dort weierzuverwenden. Mit dem e.getItem() klappt es, aber mit dem Array nicht.
So habe ich das Ganze realisiert:


Code:
public void aendere(Choice choice[i] , Object item ){
.
.
.
.
. 
}

Kannst Du mir da weiterhelfen?
 
ändere

Code:
public void aendere(Choice choice[i] , Object item ){

in

Code:
public void aendere(Choice choice, Object item ){
 
aber ich brauche schon den Index, so dass ich nacher sagen kann, wenn choice[1] diese und jene Eigenschaft hat, dann mache das und das. Wenn choice[4] diese und jene Eigenschaft hat, dann mache dies und jenes. Aber jetzt geht es ja mit Choice choice als Parameter nicht. Ich hoffe, ich mich verständlich ausgedrückt.

Danke
 
Code:
public void aendere( Choice[] choices, int index, Object item ){...}
?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben