Vector schmeißt arrayOutOfBoundsException :(

Status
Nicht offen für weitere Antworten.

dyn

Mitglied
Hi!

Kurzer Schnipsel:

Code:
Vector buchstaben;
// die begriff.length() ist bekannt. wenn ich mir mit System.out.println die vector-länge anzeigen lasse, stimmt
// das ganze auch.

buchstaben = new Vector(begriff.length());

// die nächste Zeile schmeißt die OutofBoundsException...wenn begriff.length() z.b. 5 ist. steht in der ersten Zeile der 
// Fehlermeldung außerdem zusätzlich "5 > 0" ..je nachdem wie groß die length bzw. die vector größe ist.
 
for (int i =0; i<begriff.length(); i++)
 {
if(letter.equalsIgnoreCase(begriff.substring(i,i+1)))      
  {
        buchstaben.setElementAt((Object)letter,i);
  }
 }

ich möchte mit dem code erreichen, dass wenn ein eingebener buchstabe (letter) in dem String "begriff" enthalten ist,
dieser buchstabe im vector an die stelle gepackt werden soll, wo er auch im String "begriff" ist.

was habe ich falsch gemacht?
 
bringt nichts!

...wenn du meintest ich sollte

for (int i =0; i<begriff.length(); i++)
in
for (int i =0; i<begriff.length() -1; i++)
ändern. :|
 
oh, ich sehe gerade du erhöhst die variable i zweimal in der schleife

Code:
for (int i =0; i<begriff.length(); i++)// <--- das erstemal hier 
{
if(letter.equalsIgnoreCase(begriff.substring(i,i+1)))    // <--- und hier
  {
        buchstaben.setElementAt((Object)letter,i);
  }
}

da müsste der fehler liegen ;-)
 
aber ich erhöhe sie doch nur im schleifendurchlauf, bzw. gebe damit die position des buchstabens an...i+1 ist doch nicht das gleiche wie i = i+1 !!

help pls :|
 
teste es doch mal ;-)
Code:
for (int i =0; i<begriff.length(); i++)
{
System.out.println("Wert von i = " + i + " (Vor der if-Abfrage)");
if(letter.equalsIgnoreCase(begriff.substring(i,i+1)))    
  {
        buchstaben.setElementAt((Object)letter,i);
  }
System.out.println("Wert von i = " + i + " (Nach der if-Abfrage) ");
}
 
was anderes, du sagst:

dass wenn ein eingebener buchstabe (letter) in dem String "begriff" enthalten ist,
dieser buchstabe im vector an die stelle gepackt werden soll, wo er auch im String "begriff" ist.

kommt der buchstabe an position 3 vor, soll er auch im Vector an Position 3 stehen , richtig?
Doch wenn vorher nichts drin ist und du versuchst an 3 zu schreiben , wird das nen Fehler geben.

Übrigens - eine ArrayList ist i.d.R. einem Vector vorzuziehen.
 
Damit du nicht dumm stirbst, will ich dich mal aufklären, was Oni meint :wink: .

Da i im letzen Fall ja auf den letzten Buchstaben deines Satzes zugreift, greift i + 1 logischerweiße in diesem Fall auf den letzen + 1 Buchstaben zu und dieser existiert ja logischerweiße nicht Jetzt verstanden? :wink:
 
ja, habe ich gemacht. und ich hatte recht 😀
kommt zwar selten vor, aber diesmal ist es komischerweise mal der fall. i vor der if-abfrage == i nach der if-abfrage !

brauche also immernoch hilfe 😛
 
kommt der buchstabe an position 3 vor, soll er auch im Vector an Position 3 stehen , richtig?
Doch wenn vorher nichts drin ist und du versuchst an 3 zu schreiben , wird das nen Fehler geben.

Übrigens - eine ArrayList ist i.d.R. einem Vector vorzuziehen.

hm. genau...hm gibt es denn keine möglichkeit das mit einem vector zu lösen?

gehts evtl mit den methoden setElementAt?
 
Hobbit_Im_Blutrausch hat gesagt.:
Damit du nicht dumm stirbst, will ich dich mal aufklären, was Oni meint :wink: .

Da i im letzen Fall ja auf den letzten Buchstaben deines Satzes zugreift, greift i + 1 logischerweiße in diesem Fall auf den letzen + 1 Buchstaben zu und dieser existiert ja logischerweiße nicht Jetzt verstanden? :wink:
Nein
 
Bleiglanz hat gesagt.:
Hobbit_Im_Blutrausch hat gesagt.:
Damit du nicht dumm stirbst, will ich dich mal aufklären, was Oni meint :wink: .

Da i im letzen Fall ja auf den letzten Buchstaben deines Satzes zugreift, greift i + 1 logischerweiße in diesem Fall auf den letzen + 1 Buchstaben zu und dieser existiert ja logischerweiße nicht Jetzt verstanden? :wink:
Nein

Nein, nicht verstanden oder Nein, is nicht so ???:L
 
@ bleiglanz, ich habe den vector doch mit der begriff.length() initialisiert!
das kommt doch Vector.setSize gleich oder nicht?!

@ oni und hobbit:
ich hab das mal getestet...ich kriege keine fehlermeldungen, die auf das i+1 schließen würden...
wenn das trotzdem daran liegen sollte schande über mich 🙂 ...ich probier mal weiter, bin aber für jeden tip zu haben 😀
 
Hobbit_Im_Blutrausch hat gesagt.:
Bleiglanz hat gesagt.:
Hobbit_Im_Blutrausch hat gesagt.:
Damit du nicht dumm stirbst, will ich dich mal aufklären, was Oni meint :wink: .

Da i im letzen Fall ja auf den letzten Buchstaben deines Satzes zugreift, greift i + 1 logischerweiße in diesem Fall auf den letzen + 1 Buchstaben zu und dieser existiert ja logischerweiße nicht Jetzt verstanden? :wink:
Nein

Nein, nicht verstanden oder Nein, is nicht so ???:L

ist nicht so, der letzte durchlauf ist ja gerade i=länge-1 (wegen < length()), also ist

substring(i,i+1) genau passend das letzte Zeichen????

und

nicht Capacity und Size verwechseln 🙂
 
ups, stimmt. sorry mein fehler..

i < begriff.length()

beim letzten durchlauf

i+1 == begriff.length();
 
ich würde eben mit add arbeiten 🙂
Code:
    Vector<String> buchstaben= new Vector<String>(begriff.length());
		for(int i=0,len=begriff.length();i<len;i++){                      
                buchstaben.add(
                    letter.equalsIgnoreCase(begriff.substring(i,i+1)) ? letter : null
                   );
		}

oder gleich mit Java5 auf die Indexerei verzichten
Code:
for(char c : begriff.toCharArray()){
    buchstaben.add(letter.equalsIgnoreCase(String.valueOf(c)) ? letter : null);
}
 
nice, danke für die hilfe!
der gewinner ist..... BleiGlanz! 😀
hatte capacity und size verwechselt. jetzt funzt es wie geschmiert.
oni & hobbit: danke trotzdem!
 
welchen typ hat denn überhaupt letter?

Code:
public Vector<String> tuDies(String letter, String str){
    Vector<String> res= new Vector<String>();
    char upChar= c.toUpperCase().charAt(0);
    for(char c: str.toUpperCase().toCharArray())
        if(c==upChar)
	res.set(0, c);
}

so oder ähnlich würd ichs machen...

/edit: mist..
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben