ArrayIndexOutOfBoundsException

Grejak

Aktives Mitglied
Hallo ich habe ein Problem mit der Obengenannten Exception in dieser Methode:
Java:
public void load(String fileName){
		try{
			FileReader r=new FileReader(fileName);
			String ret=null;
			int c;
			while((c=r.read())!=-1){
				ret+=c;
			}
			if(ret!=null){
				ret=ret.substring(4);
				String[] col=ret.split(";");
				
				recipeName=col[0];
				
				String[] ingredients=col[1].split(",");
				for(int cnt=0;cnt<=ingredients.length;cnt++){
					this.ingredients.add(ingredients[cnt]);
					System.out.println(ingredients[cnt]);
				}
				String[] ingredientvalue=col[2].split(",");
				for(int cnt=0;cnt<=ingredientvalue.length;cnt++){
					this.ingredientValue.add(Integer.parseInt(ingredients[cnt]));
				}
				
				subscripe=col[3];
			}
			r.close();
		}catch(IOException ex){
			System.out.println("Error");
		}
	}
Sie lässt sich auf jeden Fall ausführen und ich glaube die Exception wird in den beiden Reihen mit split()
 

Marco13

Top Contributor
String[] col=ret.split(";");
System.out.println("Result of splitting '"+ret+"' is "+Arrays.toString(col));

EDIT: Und stimmt der Arrayzugriff in Zeile 22? Die Genaue Zeile steht auch im Stack Trace...
 
N

nillehammer

Gast
In der Exception steht die genaue Zeilennummer drinnen, an der sie auftritt. Damit ist zweifelsfrei die Stelle in Deinem Code identifizierbar. Wir können das leider so nicht herausfinden, weil wir die Struktur der Datei nicht kennen, die Du einliest.
 
N

nillehammer

Gast
Marco13 hat's glaub ich entdeckt:
[Java]
for(int cnt=0;cnt<=ingredientvalue.length;cnt++)
[/Java]
Kann sein, dass schon vorher was schief geht, aber da wird auf jeden Fall eine solche Exception fliegen. Schreibe nicht "<=" sondern "<".
 

Grejak

Aktives Mitglied
Das problem besteht immernoch allerdings bin ich mir jetzt 500% sicher das es in den .split() passiert


Habe dies mit System.out.println("OK");
an verschiedenen stellen feststellen können
 

chalkbag

Bekanntes Mitglied
Prüfe doch einfach ob es col[1], col[2] ... gibt. Oder noch verrückter, du guckst mit dem Debugger was los ist oder sagst uns welche Zeile (wie im Fehler angegeben) die NullPointer wirft.
 
S

SlaterB

Gast
ein split() Aufruf hat noch auf der Welt bei irgendjemanden eine ArrayIndexOutOfBoundsException ausgelöst,
wenn überhaupt dann interpretierst du irgendwas falsch, weitere Befehle in der gleichen Zeile oder ähnliches

poste immer
- aktuellen Code, besser gleich vollständige Klasse,
- komplette Fehlermeldungen, bei Laufzeitexceptions StackTrace, und zwar idealerweise so dass man die Zeilenangaben nachvollziehen kann
- Dateien und Benutzereingaben möglichst durch Dummy-Strings im Programm ersetzen
- bei ungläubigen Nachfragen zu Fehlern helfen Screenshots ;)
 

Grejak

Aktives Mitglied
Also ich glaube ich habe den fehler
weiss aber nicht wie ich ihn beheben kann und zwar steht in der datei etwas völlig anderes als ich
hinein schreibe

Hier ist die komplete Ausgabe.

Java:
public class Recipe{

	private static final long serialVersionUID=1L;
	
	private String recipeName;
	private String subscripe;
	
	private Vector<String> ingredients=new Vector<String>();
	private Vector<Integer> ingredientValue=new Vector<Integer>();

public Recipe(){
		newRecipe();	
	}
	public Recipe(String fileName){
		load("resources/recipes/"+fileName+".dat");
	}
	public Recipe(String recipeName,String Subscripe){
		
	}
	
	public String toFileFormat(){
		String ret;
		ret=recipeName+";";
		
			for(ListIterator<String> it=ingredients.listIterator();it.hasNext();){
				String r=it.next();
				ret+=r+",";
			}
			ret+=";";
			for(ListIterator<Integer> it=ingredientValue.listIterator();it.hasNext();){
				int r=it.next();
				ret+=r+",";
			}
		ret+=";"+subscripe+";";
		System.out.println(ret);
		return ret;
	}
	
	public void load(String fileName){
		try{
			//Read the File
			FileReader r=new FileReader(fileName);
			String ret=null;

			int c;
			while((c=r.read())!=-1){
				ret+=c;
			}		
			ret=ret.substring(4);
			
			String[] col=ret.split(";");
			System.out.println(ret);
			
			String[] ingredients;
			String[] recipes;
			
			r.close();
			
		}catch(IOException ex){
			
		}
	}
	public void save(String fileName){
		try{
			FileWriter w=new FileWriter(fileName);
			w.write(toFileFormat());
			w.close();
		}catch(IOException ex){
			
		}
	}

Datei-inhalt:

Cheddar;grego,Cheddar,sdfg,;2,2,4,;Harry und Cheddar matschen alte Sahne;

Und das was ich erhalte wenn ich den ausgelesenen String ausprinte:

67104101100100971145910311410110311144671041011001009711444115100102103445950445044524
45972971141141213211711010032671041011001009711432109971161159910410111032971081161013
2839710411010159

???:L
 
G

Gast2

Gast
read() liefert dir einen int zurück, und die ints hängst du alle hintereinander.
Leg um den FileReader noch nen BufferedReader und ruf readLine() auf.
 
G

Gast2

Gast
Eine einfache Lösung ohne BufferedReader wäre folgende:
Java:
ret+= (char)c;
Eine Lösung mit BufferedReader findest du sicherlich auch bei Google oder in der Insel.
 

Neue Themen


Oben