ArrayIndexOutOfBoundsException

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/arrayindexoutofboundsexception_103747/page_1 - zur Vollversion wechseln!


d3cod3 schrieb am 11.01.2004 um 12:26

muss bei nem array testen ob es nur bestimmte zahlen enthält.


Code:
String input = readWord();
	
	int lange=input.length();
	char[] eingabe=input.toCharArray();
	
	int x = eingabe.length;


      
	for(i=0;i<=x;i++)
	    {
		if(eingabe[i]!='('&&eingabe[i]!=')'&&eingabe[i]!='+'
&&eingabe[i]!='-'&&eingabe[i]!='*'&&eingabe[i]!='<'&&eingabe[i]!='>'
&&eingabe[i]!='='&&eingabe[i]!=','&&eingabe[i]!='1'&&eingabe[i]!='2'
&&eingabe[i]!='3'&&eingabe[i]!='4'&&eingabe[i]!='5'&&eingabe[i]!='6'
&&eingabe[i]!='7'&&eingabe[i]!='8'&&eingabe[i]!='9'&&eingabe[i]!='0')
		    {print("schas");return;
		    }
	    }

kompilieren tuts und wenn ich was eingeb was net sein soll schreibts mir auch "schas". nur wenn ich was richtiges eingeb wie zb (3,5,6)+(4,5,6) dann kommt:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 17
at Main.main(Main.java:28)

was will er mir da sagen? komm net dahinter was net passen kann.


xdfk schrieb am 11.01.2004 um 12:38

dein i schieszt ueber das array hinaus


ICE3D schrieb am 11.01.2004 um 14:32

Schleife müsst bis i<x und nicht bis i<=x gehn, da der Index des Arrays bei 0 beginnt. d.h. das erste Element hat den Index 0.
Mit length bekommst die Anzahl der Elemente, die im Array enthalten sind.
Deshalb muss die Schleife auch von 0 bis <length gehn

hth


d3cod3 schrieb am 11.01.2004 um 14:53

argl. das is ja ein ärger blöder fehler. danke


mat schrieb am 13.01.2004 um 01:24

noch nachträglich.. statt 20 mal "bla=?? && bla=?!" in einem if statement, solltest lieber ein array nehmen und dann mit einer 2ten schleife dieses durchprüfen. langsamer, schaut aber besser aus :p


gue schrieb am 13.01.2004 um 12:59

@mat: Würde ich nicht machen, sondern eher ein BitSet verwenden (Package java.util).
Das würde dann ca. so ausschaun:

Code:
BitSet set = new BitSet();
set.set((int)'(');
set.set((int)')');
/* ... usw. */
for (i=0; i<x; i++) {
  if (set.get((int)eingabe[i]) { /* ... */ }
}
Aber diese if-Abfrage ist prinzipiell auch in Ordnung :p


atrox schrieb am 14.01.2004 um 05:27

die initialisiertung des bitsets ist wiederrum recht ugly ;(

if ("()<>,.*=-+01234567890".indexOf(eingabe[i])<0) { /* Fehler */ }




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025