java_anfaenger 0 Geschrieben 13. Januar //Attribut in der Student Klasse private int matrikelnummer = 0; //Im Konstruktor ... matrikelnummer = Integer.parseInt(teile[1]); Im Main : public class MainProgramm { static String file = "./ein/Studierende.txt"; static HashMap<Integer,Student> studentobjekt = null; public static void main(String[] args) { studentenVonListe(); } public static void studentenVonListe() { studentobjekt = new HashMap<Integer, Student>(); try { FileInputStream tmp = new FileInputStream(file); InputStreamReader utf = new InputStreamReader(tmp, "UTF8"); BufferedReader temp = new BufferedReader(utf); String zeile = ""; while((zeile = temp.readLine()) != null) { Student student = new Student(zeile); studentobjekt.put(student.getMatrikelnummer(), student); } tmp.close(); utf.close(); temp.close(); } catch(IOException e) { e.printStackTrace(); } } Warum bekomme ich diesen Exception Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 Eclipse weist auf diese Zeile : InputStreamReader utf = new InputStreamReader(tmp, "UTF8"); oder diese Zeile in der Student klasse: matrikelnummer = Integer.parseInt(teile[1]); Ich hoffe jemand kann mir da einen Tipp geben. Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
1 Visar 389 Geschrieben 13. Januar vor einer Stunde schrieb java_anfaenger: teile[1] Meinten Sie vielleicht: zeile? 1 thereisnospace reagierte darauf Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
1 Whiz-zarD 597 Geschrieben 14. Januar vor 39 Minuten schrieb allesweg: Zusätzlich: wenn du derzeit Java lernst, warum nutzt du dann nicht try with ressource? ( @Visar das ist die von dir verlinkte Variante) Oder gleich den Debugger... Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
1 Whiz-zarD 597 Geschrieben 14. Januar (bearbeitet) Wenn du schon Eclipse verwendest, dann benutze doch den Debugger. Setze an der Stelle ein Breakpoint. Dann kannst du den Code Schritt-für-Schritt anschauen und nachvollziehen, was er tut. Dann bekommst du dein Fehler auch schnell raus. Mache dich mit deinen Werkzeugen vertraut. Bearbeitet 14. Januar von Whiz-zarD 1 allesweg reagierte darauf Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
0 java_anfaenger 0 Geschrieben 14. Januar vor 5 Stunden schrieb Visar: Meinten Sie vielleicht: zeile? ne, teile stimmt schon deshalb ... String[] teile = datenZeile.split(","); ich splitte sozusagen in der .txt Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
0 Visar 389 Geschrieben 14. Januar (bearbeitet) Das geht aus dem gezeigten Code halt nicht hervor, dass du das machst. Nur das: // Main Student student = new Student(zeile); // Konstruktor für Student matrikelnummer = Integer.parseInt(teile[1]); Weswegen natürlich davon ausgegangen werden darf/kann, dass du einen typo übersehen hast. 😃 Hast du dir teile mal ausgeben lassen, bevor du versuchst sie zu verarbeiten? Sieht das Array so aus, wie du es erwartest? Wie sieht deine Textdatei aus? So oder so? // Option 1: datei.txt 1 2, 3 --> Index = 1 erzeugt nach str.split() eine java.lang.ArrayIndexOutOfBoundsException. // Option 2: datei.txt 1,Carwyn,FachrichtungY 2,Carwyn,FachrichtungA 3,Carwyn,FachrichtungY --> Index = 1 kann nach str.split() bedenkenlos genutzt werden. Und du weißt, dass ein Array mit Index 0 beginnt statt mit Index 1? Sprich: Wenn die Matrikelnr. ganz vorne steht, wäre sie eh auf Index 0? vor 7 Stunden schrieb java_anfaenger: InputStreamReader utf = new InputStreamReader(tmp, "UTF8"); Dazu hab ich ansonsten noch das hier gefunden: InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8); https://mkyong.com/java/how-to-read-utf-8-encoded-data-from-a-file-java/ Sieht aus als würde der InputStreamReader in neueren Java-Version etwas anders initialisiert werden. Hast du das mal probiert oder kannst du das mal probieren, vorausgesetzt dein Java-Dingsbums unterstützt das? Fragen über Fragen. 👀 Bearbeitet 14. Januar von Visar Ergänzung zum InputStreamReader Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
0 MartinSt 76 Geschrieben 14. Januar Btw: Zu deinem Zweck nimmt man besser einen Tokenizer statt die CSV manuell zu zerhacken. Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
0 allesweg 1,206 Geschrieben 14. Januar Die Codeschnipsel reichen nicht aus, um dein Problem zu lösen. Zusätzlich: wenn du derzeit Java lernst, warum nutzt du dann nicht try with ressource? ( @Visar das ist die von dir verlinkte Variante) Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
0 java_anfaenger 0 Geschrieben 14. Januar vor 8 Stunden schrieb Visar: Das geht aus dem gezeigten Code halt nicht hervor, dass du das machst. Nur das: // Main Student student = new Student(zeile); // Konstruktor für Student matrikelnummer = Integer.parseInt(teile[1]); Weswegen natürlich davon ausgegangen werden darf/kann, dass du einen typo übersehen hast. 😃 Hast du dir teile mal ausgeben lassen, bevor du versuchst sie zu verarbeiten? Sieht das Array so aus, wie du es erwartest? Wie sieht deine Textdatei aus? So oder so? // Option 1: datei.txt 1 2, 3 --> Index = 1 erzeugt nach str.split() eine java.lang.ArrayIndexOutOfBoundsException. // Option 2: datei.txt 1,Carwyn,FachrichtungY 2,Carwyn,FachrichtungA 3,Carwyn,FachrichtungY --> Index = 1 kann nach str.split() bedenkenlos genutzt werden. Und du weißt, dass ein Array mit Index 0 beginnt statt mit Index 1? Sprich: Wenn die Matrikelnr. ganz vorne steht, wäre sie eh auf Index 0? Dazu hab ich ansonsten noch das hier gefunden: InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8); https://mkyong.com/java/how-to-read-utf-8-encoded-data-from-a-file-java/ Sieht aus als würde der InputStreamReader in neueren Java-Version etwas anders initialisiert werden. Hast du das mal probiert oder kannst du das mal probieren, vorausgesetzt dein Java-Dingsbums unterstützt das? Fragen über Fragen. 👀 Ja die .txt ist so aufgebaut mit ",". Es funktioniert jetzt ohne Fehler nur gibt der nichts aus in der Konsole woran könnte es vermutlich liegen ? 1 allesweg reagierte darauf Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
0 pr0gg3r 259 Geschrieben 14. Januar vor 46 Minuten schrieb java_anfaenger: woran könnte es vermutlich liegen ? vor 32 Minuten schrieb Whiz-zarD: [...] benutze doch den Debugger. Setze an der Stelle ein Breakpoint. Dann kannst du den Code Schritt-für-Schritt anschauen und nachvollziehen, was er tut. Dann bekommst du dein Fehler auch schnell raus. Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
0 java_anfaenger 0 Geschrieben 14. Januar vor 12 Minuten schrieb pr0gg3r: habe ich gemacht .. der Debugger funkt. nicht so wie auf dem Video .. ich kann nur sehen was er mir Rot anzeigt und die Stelle ist beim catch(){} was ich nicht verstehe. Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
0 Whiz-zarD 597 Geschrieben 14. Januar (bearbeitet) Dann fliegt doch da eine Exception. Dann schaue dir doch an, was studentenVonListe() macht. Setze an die erste Zeile dieser Methode ein Breakpoint und durchlaufe Zeile für Zeile dein Code. Wie sieht der konstruktor von Student und der Eingangsparamter aus? Offenbar splittest du ja den String und ich vermute, dass das nicht korrekt passiert. Bearbeitet 14. Januar von Whiz-zarD Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
0 java_anfaenger 0 Geschrieben 14. Januar (bearbeitet) vor 14 Minuten schrieb Whiz-zarD: Dann fliegt doch da eine Exception. Dann schaue dir doch an, was studentenVonListe() macht. Setze an die erste Zeile dieser Methode ein Breakpoint und durchlaufe Zeile für Zeile dein Code. Wie sieht der konstruktor von Student und der Eingangsparamter aus? Offenbar splittest du ja den String und ich vermute, dass das nicht korrekt passiert. package beuth; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class Student { //------------------------------------------- // Attribute private String name = ""; private int matrikelnummer = 0; private String studiengang = ""; private Map<String, String> faecherZuNoten = null; //------------------------------------------- // Konstruktor public Student(String datenZeile) throws FalscherStudiengangAusnahme { try { // Daten in Teile aufteilen String[] teile = datenZeile.split(","); // Die Teile in Attribute zuordnen bzw. bearbeiten name = teile[0]; matrikelnummer = Integer.parseInt(teile[1]); studiengang = teile[2]; // Wenn noetig, Ausnahme werfen if (!studiengang.equalsIgnoreCase("Medieninformatik") && !studiengang.equalsIgnoreCase("Technische Informatik") && !studiengang.equalsIgnoreCase("Druck- und Medientechnik") && !studiengang.equalsIgnoreCase("Screen Based Media")) { FalscherStudiengangAusnahme e = new FalscherStudiengangAusnahme(studiengang + " gehoert nicht dazu"); throw e; } faecherZuNoten = new HashMap<String, String>(); } catch (ArrayIndexOutOfBoundsException e) { throw e; } catch (NumberFormatException e) { throw e; } } //------------------------------------------- // Methoden public int getMatrikelnummer() { return matrikelnummer; } public String getName() { return name; } public String getStudiengang() { return studiengang; } public void noteEintragen(String fach, String note) { faecherZuNoten.put(fach, note); } public void setMatrikelnummer(int matrikelnummer) { this.matrikelnummer = matrikelnummer; } public void setName(String name) { this.name = name; } public void setStudiengang(String studiengang) { this.studiengang = studiengang; } public String toString() { String returnString = name + " (" + matrikelnummer + "), " + studiengang; return returnString; } public List<String> zeugnisZeilenAbrufen() { List<String> returnList = new ArrayList<String>(); returnList.add(toString()); // Faecher alphabetisch anordnen List<String> faecher = new ArrayList<String>(faecherZuNoten.keySet()); Collections.sort(faecher); // Eine Zeile fuer jedes Fach erstellen: // Name des Faches <tab> Note for (String fach : faecher) { returnList.add(fach + "\t" + faecherZuNoten.get(fach)); } return returnList; } } So siehts aus ... meine txt sieht so aus Anna Alt,800001,Medieninformatik Bob Berg,800002,Medieninformatik Carla Castor,800003,Medieninformatik Daniel Dorf,800004,Medieninformatik Eli Eiche,800005,Medieninformatik Bearbeitet 14. Januar von java_anfaenger Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
0 java_anfaenger 0 Geschrieben 14. Januar Hat sich erledigt.. mit der Ausgabe Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen
Warum bekomme ich diesen Exception Fehler:
Eclipse weist auf diese Zeile :
InputStreamReader utf = new InputStreamReader(tmp, "UTF8");
oder diese Zeile in der Student klasse:
matrikelnummer = Integer.parseInt(teile[1]);
Ich hoffe jemand kann mir da einen Tipp geben.
Diesen Beitrag teilen
Link zum Beitrag
Auf anderen Seiten teilen