ArrayIndexOutOfBoundsException < fehlersuche?

turndevil

Mitglied
Hi Leute.

hab folgenden Code:

Code:
public class SuchEngine {
	
private String[] result;
  private int counter;
	
  public SuchEngine(){
       counter = 0;
  }
	
  public void nachTA(String suchStr, DatVector dv){
       result = new String[dv.getV().capacity()];
       boolean check;
		
       for(int i = 0; i < dv.getV().capacity(); i++){
            MediaFile datei = (MediaFile)dv.getV().elementAt(i);
            
  >        StringBuffer StrB = new StringBuffer(datei.getPfad() + datei.getName());
            StrB.toString().toLowerCase();
            
            check = suchStr.contentEquals(StrB);
			
            if(check){
                 result[i] = StrB.toString();
                 counter++;
           }else{}
       }
		
}

bekomme da immer in Zeile ">" die Fehlermeldung "AreaIndexOutOfBoundsException 7>=7"

An was kann das liegen? Sonst wenn ich diese Fehlermeldung hab, habe ich meist in der for schleife "<=" statt "<" oder so.

danke im voraus.

mfg
tom
 
Überprüfe das Attribute Array.length und gib auch den Zähler der for-Schleife aus, mit dem du das Array ansprichst. Irgendwo müssen die sich ja in die Wolle bekommen.
 
Original geschrieben von turndevil
Hi Leute.

hab folgenden Code:

Code:
public class SuchEngine {
	
private String[] result;
  private int counter;
	
  public SuchEngine(){
       counter = 0;
  }
	
  public void nachTA(String suchStr, DatVector dv){
       result = new String[dv.getV().capacity()];
       boolean check;
		
       for(int i = 0; i < dv.getV().capacity(); i++){
            MediaFile datei = (MediaFile)dv.getV().elementAt(i);
            
  >        StringBuffer StrB = new StringBuffer(datei.getPfad() + datei.getName());
            StrB.toString().toLowerCase();
            
            check = suchStr.contentEquals(StrB);
			
            if(check){
                 result[i] = StrB.toString();
                 counter++;
           }else{}
       }
		
}


bekomme da immer in Zeile ">" die Fehlermeldung "AreaIndexOutOfBoundsException 7>=7"

An was kann das liegen? Sonst wenn ich diese Fehlermeldung hab, habe ich meist in der for schleife "<=" statt "<" oder so.

danke im voraus.

mfg
tom

Es klemmt nicht in der angegebenen Zeile, sondern bei

MediaFile datei = (MediaFile)dv.getV().elementAt(i);

Warum? Ganz einfach, man sehe die Bedingung der for-Schleife:

i < dv.getV().capacity()

Damit wird aber die Kapazität des Vectors ausgelesen, nicht die Anzahl der tatsächlich enthaltenen Objekte. Die Kapazität enthält offenbar eine Anzahl an aufnehmbaren Komponenten, nicht an vorhandenen. Was Du brauchst ist

int size() Returns the number of components in this vector.

Also ersetze in Deinem Code die Bedingung in der for-Schleife einfach durch
i < dv.getV().size()
und alles wird gut. ;-)

Du hast vermutlich eine Kapazität von 100 oder so, aber nur 10 Elemente.
 
Aaaaaah ih seids die Götter schlechthin. =)

Das mit size() hat geklappt.

Es ist zwar so, dass bei der Erstellung des Vectors immer eine zeile aus einem Textfile eingelesen, umgeandelt und dann in den Vector geschrieben wird. Aber es kann gut sein, dass ich da auch ein bisschen schlampig programmiert hab. So, dass zB am Ende ein leeres Element übrigbleibt oder so.

Also nochmals danke...kann schon sein, dass da noch was kommt *gg* NARF

mfg
tom

edit: Und schon hab ich wieder was gefunden. Wie oben zu sehen ist will ich innerhalb eines absoluten pfades (sprich: (datei.getPfad() + datei.getName())) nach einem bestimmten Suchstring suchen. Aber anscheinend funktioniert das so nicht. "StrB.toString().toLowerCase()" is zB Schmarrn. Soll ich nun den StringBuffer mit dem absoluten Pfad in nen String umwandeln, toLowerCase() anwenden und wieder in den StringBuffer setzen oder gibt es eine andere Möglichkeit eine solche Suche zu implementieren? (Die Klasse MediaFile ist übrigens von File abgeleitet)

(nochmal) mfg
tom
 
Zuletzt bearbeitet:
Zurück