"We are back" « oc.at

ArrayIndexOutOfBoundsException

d3cod3 11.01.2004 - 12:26 536 6
Posts

d3cod3

Legend
...
Avatar
Registered: Aug 2002
Location: insert location ..
Posts: 15285
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

pädagogisch wertvoll
Avatar
Registered: Sep 2000
Location: Graz
Posts: 6441
dein i schieszt ueber das array hinaus

ICE3D

Addicted
Avatar
Registered: Aug 2002
Location: 127.0.0.1
Posts: 496
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

Legend
...
Avatar
Registered: Aug 2002
Location: insert location ..
Posts: 15285
argl. das is ja ein ärger blöder fehler. danke

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25536
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

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
@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

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
die initialisiertung des bitsets ist wiederrum recht ugly ;(

if ("()<>,.*=-+01234567890".indexOf(eingabe[i])<0) { /* Fehler */ }
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz