Objekte vergleichen

soa

Erfahrenes Mitglied
Hallo,

habe irgendwie noch einige Verständnisprobleme mit einer Vektoraufgabe:

Mit folgender Methode möchte ich einen Eintrag aus einem Vector löschen:

Die Objekte:
Vector v = new Vector ();
Telefonlisteneintrag o = new Telefonlisteneintrag( name, nummer);
Telefonlisteneintrag obj ;

Code:
public void eintragLoeschen()throws IOException {
	  System.out.println( "Geben Sie hier bitte die Daten ein, ");
	  System.out.println( "die geloescht werden sollen.");
	  name = o.getInputString();
	  nummer = o.getInputNummer();
	  obj = new Telefonlisteneintrag(name, nummer);  
	  try{
	  for (int i =0; i <= v.size(); i++){
	  o = (Telefonlisteneintrag)v.get(i);
	  if (o.equals(obj)){	
	  v.remove(i);
	  System.out.println( "Eintrag erfolgreich geloescht.");
	  System.out.print(   "------------------------------");
	 }//if
	}//for
}
catch (ArrayIndexOutOfBoundsException e){
	  System.out.println( "Fehler");
}

Ich bekomme immer eine Fehlermeldung:

ArrayIndexOutOfBoundsException die ich dann catch....
Der entsprechende Eintrag word leider nicht gelöscht...

Über einen Tipp wäre ich sehr dankbar...

Grüsse
SOA
 
Ganz einfach,

du läufst bei deiner schleife bis einschliesslich v.size, sprich der Vektor Grösse, da du aber bei 0 anfängst musst du eins abziehen in der Schleife, sprich <v.size laufen, da es sonst Size+1 schleifendurchläufe sind, da du von 0 bis einschliesslich v.size läufst.


Im Klartext nicht:

for (int i =0; i <= v.size(); i++)

sondern

for (int i =0; i < v.size(); i++)

Gruss
Torsten
 
Ich würde sogar empfehlen den Vector durch Enumeration durchzugehen.

Code:
        Enumeration enum= v.elements();
        
        while(enum.hasMoreElements()){
            
          YourObj test = (YourObj )enum.nextElement();

          //do something
         }
 
Thomas Darimont hat gesagt.:
Hallo!

Ich würde immer (wenn's geht) mit dem Iterator Interface arbeiten. Enumeration ist veraltet...

Gruß Tom

Ja, stimm ich Dir zu, nur der Vector an sich bringt es nicht mit :-/
 
Hallo,


vielen Dank, werde das dann noch einmal mit dem Iterator probieren.

Ansonstenläuft es jetzt...

if (o.equals(obj)){

Die if-Anweisung war extrem falsch..... Die Objekte haben also irgendeine Nummer,
die natürlich voneinander abweichen.

Wenn man es so macht, dass man zum Beispiel nur einen Teil des Objektes ausliest,
dann funktioniert es ganz gut....

if ( o.getName().equals(obj.getName())).......an so on!

oder if ( o.getNummer()==obj.getName()).

Ist schon nicht so ganz einfach mit den Vectoren
Hab ich ganz schön lange dran gesessen...
:)

Viele Grüsse
SOA
 
Zurück