-
Gesamte Inhalte
68 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von java_anfaenger
-
-
vor 15 Minuten schrieb Rienne:
Hast du deinen Code denn auch als "Debug as..." ausgeführt?
Wenn sich das nicht automatisch öffnet, solltest du auch die Möglichkeit haben oben rechts in die Debug-Sicht zu wechseln.
Hab es ausgeführt und auch nachgeschaut, doch bei mir werden keine Variablen angezeigt, also das Fenster bleibt blank
-
vor 12 Minuten schrieb Rienne:
Hast du deinen Code denn auch als "Debug as..." ausgeführt?
Wenn sich das nicht automatisch öffnet, solltest du auch die Möglichkeit haben oben rechts in die Debug-Sicht zu wechseln.
Exception in thread "main" java.lang.NumberFormatException: For input string: "Bob Berg,800002,Medieninformatik"
Das ist die Fehlerausgabe meiner Konsole und die Information mit "Bo.." die liegt in der Studierende.txt
-
vor 4 Minuten schrieb Rienne:
Was für eine IDE benutzt du denn?
Eclipse. Normalerweise öffnet sich ein Fenster wo man halt die Schritte sieht bei mir ist das nicht der Fall
-
vor 4 Minuten schrieb Rienne:
Es geht darum, dass dein String file ein Dateiname inklusive einem vorangestellten Ordnerpfad ist. Wenn du dir aber den Namen der Datei ausgeben lässt, wird dort höchstwahrscheinlich kein Ordnerpfad mit angegeben sein. D.h. deine equals-Abfrage wird nicht greifen.
Wie schon viele vor mir auch in den anderen Threads von dir geschrieben haben: Nutze doch erst einmal deinen Debugger und schau dir an, welche Werte du wann in welcher Variable (oder auch Konstanten) hast und was du an der Stelle eigentlich erwarten würdest.
Der debugger funktioniert bei mir nicht so wie gewollt.. leider
-
vor 7 Minuten schrieb PVoss:
Ist aber schonmal ein Schritt in die richtige Richtung.
Bist du dir denn sicher, dass der Dateiname aus datei.getName() auch den Ordner "ein/" enthält?
Verstehe ich nicht ganz. getName() returned nur name welches ein String ist
-
vor 2 Minuten schrieb PVoss:
Ja.
Du musst die Dateinamen aber trotzdem mit der Variable file vergleichen. Du vergleichst aber mit ordnerEin.
Guck nochmal nach, ob du die Variable file irgendwo in deinem Code nutzt, außer bei der Initialisierung.
habe ich auch gemerkt geändert, aber dennoch tut sich nichts ^^
private static void notenEinlesen() { try { File einOrdner = new File(ordnerEin); //alle Dateien einsehen und die Dateie Studierende weglassen File[] listdateien = einOrdner.listFiles(); for (File datei : listdateien) { if (!datei.getName().equals(file)) { //Aus Youtube Vorlesung zum einlesen der Dateien FileInputStream fileinpstr = new FileInputStream(datei); InputStreamReader inpstrre = new InputStreamReader(fileinpstr, StandardCharsets.UTF_8); BufferedReader bufr = new BufferedReader(inpstrre); String line = ""; // Die erste Zeile der .txt Datei benennen damit Programm weiß String fach = bufr.readLine(); // While solange die Noten und Matrikelnummern durchgelesen werden while ((line = bufr.readLine()) != null){ String[] tokens = line.split("\\t"); //aus der txt die Matrikelnummer entnehmen int matrikelnummer = Integer.parseInt(tokens[0]); //aus der txt die Note entnehmen String note = tokens[1]; //Note der Studenten eintragen studentobjekt.get(matrikelnummer).noteEintragen(fach, note); } fileinpstr.close(); inpstrre.close(); bufr.close(); } } } catch (IOException e) { System.out.println("Fehler"); e.printStackTrace(); } }
-
vor 1 Minute schrieb PVoss:
Jo, aber du nutzt sie ja nirgendwo im Code den du gezeigt hast. Oder ich hab die Stelle übersehen.
public class MainProgramm { private static String file = "./ein/Studierende.txt"; private static String ordnerEin = "./ein"; private static String ordnerAus = "./aus"; private static HashMap<Integer,Student> studentobjekt = null;
So sieht der Anfang aus
-
vor 1 Minute schrieb MartinSt:
So wie ich es verstehe (ohne dass man ja alle Variablen verstehen kann) liest die for Schleife doch über alle Dateien im Ordner, außer einer.
genau.. aber das Problem ist, dass sie dennoch die Datei liest welche sie nicht lesen soll
-
vor 5 Minuten schrieb PVoss:
Moin,
durch die beiden Variablen einOrdner und ordnerEin ist's ziemlich einfach durcheinander zu kommen. Vergib da besser mal andere Namen, bei denen man deutlich sieht um was es jeweils geht.
Die Variable file sehe ich nirgendwo. Gehört die hier hin?
if (!datei.getName().equals(ordnerEin)) {
temp und tmp sind auch schlechte Namen. Benenn die einfach als das was sie sind: inputStream und bufferedReader.
utf als inputStreamReader oder zumindest als utfReader. Wobei man bei utfReader wahrscheinlich immer noch stutzig wird - es gibt aber wenigstens einen Hinweis, dass es sich um einen Reader handelt.
private static String file = "./ein/Studierende.txt";
die ist in der Main ganz oben
-
Guten Tag leute... kleines Problem vorerst meine Code Abschnitte
meine .txt Datei sieht so aus..
Mathematik I 800001 2,0 800002 2,3 800003 2,0 800004 1,7 800005 1,0
private static void notenEinlesen() { try { File einOrdner = new File(ordnerEin); //alle Dateien einsehen und die Dateie Studierende.txt weglassen File[] listdateien = einOrdner.listFiles(); for (File datei : listdateien) { if (!datei.getName().equals(ordnerEin)) { //zum einlesen der Dateien FileInputStream tmp = new FileInputStream(datei); InputStreamReader utf = new InputStreamReader(tmp, StandardCharsets.UTF_8); BufferedReader temp = new BufferedReader(utf); String line = ""; // Die erste Zeile der .txt Datei benennen damit Programm weiß String fach = temp.readLine(); // While solange die Noten und Matrikelnummern durchgelesen werden while ((line = temp.readLine()) != null){ String[] tokens = line.split("\\t"); //aus der txt die Matrikelnummer entnehmen int matrikelnummer = Integer.parseInt(tokens[0]); //aus der txt die Note entnehmen String note = tokens[1]; //Note der Studenten eintragen studentobjekt.get(matrikelnummer).noteEintragen(fach, note); } temp.close(); utf.close(); tmp.close(); } } } catch (IOException e) { System.out.println("Fehler"); e.printStackTrace(); } }
Wie in den Kommentaren beschrieben will ich die Datei Studierende auslassen, doch das Programm greift auf die Studierende Datei zu ..
file = studierende.txt
ordnerEin = (wo sich studierende.txt befindet) aber auch andere .txt dateien
-
Hat sich erledigt.. mit der Ausgabe
-
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
-
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.
-
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 ?
-
vor 5 Stunden schrieb Visar:
Meinten Sie vielleicht: zeile?
ne, teile stimmt schon deshalb ...
String[] teile = datenZeile.split(",");
ich splitte sozusagen in der .txt
-
//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.
-
vor 2 Minuten schrieb Whiz-zarD:
Wir haben doch jetzt alles durch. Wir haben die HashMap. Wieso schreibst du wieder Student.getMatrikelnummer()?
Ehrlich gesagt, bin ich mit den Nerven am Ende und möchte hier auch nichts mehr schreiben. Gefühlt muss ich wieder von vorne anfangen...
Ich habe gerade wirklich kein Schimmer wie ich die HashMap mit den Daten aus der Datenklasse fülle ...
wie komme ich denn zu den Daten von der Daten Klasse ..?
for(Map.Entry<String, String> pair: studentenDaten.entrySet()) { //was kommt hier her ? }
fange ich wieder so an ?
-
Gerade eben schrieb Whiz-zarD:
Wir haben doch jetzt alles durch. Wir haben die HashMap. Wieso schreibst du wieder Student.getMatrikelnummer()?
Ehrlich gesagt, bin ich mit den Nerven am Ende und möchte hier auch nichts mehr schreiben. Gefühlt muss ich wieder von vorne anfangen...
Das waren nur versuche ...
-
for(Map.Entry<String, String> pair: studentenDaten.entrySet()) { int matrikelnummer = Student.getMatrikelnummer(); String lieblingsfach = Student.getLieblingsfach(); System.out.println("Student: " + matrikelnummer + " " + "Lieblingsfach: " + lieblingsfach); }
Letzter Stand
Student: 0 Lieblingsfach:
warum ?
-
for(Map.Entry<String, String> pair: studentenDaten.entrySet()) { String matrikelnummer = pair.getKey().getMatrikelnummer(); String lieblingsfach = pair.getValue().getLieblingsfach(); System.out.println("Student: " + matrikelnummer + " " + "Lieblingsfach: " + lieblingsfach); } der meckert hier bei getMatrikelnummer() und getLieblingsfach() das die ein undefinierten String Typ haben
-
Gerade eben schrieb Whiz-zarD:
Ja, wie denn auch? Du splittest ja auch den String "Name;Matrikelnummer;Lieblingfach" und keine Studentendaten.
Jetzt kommt der letzte Punkt:
- Mehrere Studenten in die HashMap füllen
Also schreibst du wieder eine for-Schleife, die nun über deine Liste mit deinen Studentendaten (also die Liste mit den string der Studentendaten) iteriert, ihn splittet und die Daten in die HashMap füllt.
Okay... dazu hätte ich echt kein Plan
-
Gerade eben schrieb Whiz-zarD:
Richtig.
Also wissen wir nun folgendes:
- wie man ein string in ein Array splittet
- wie man auf die Strings im Array zugreifen kann
- wie man eine HashMap füllt
Daraus kann man ja schon mal ein Code schreiben, der die Informationen von einem Student holt und sie in die HashMap überführt. Fehlen nur noch zwei Dinge:
- Über die HashMap iterieren und die Daten auf der Konsole ausgeben
- Mehrere Studenten in die HashMap füllen
Wie kann man jetzt nun über die HashMap iterieren und den Schlüssel und Wert auf der Konsole ausgeben?
Edit:
Ja, es kommt so eine for-Schleife. Es muss aber Map.Entry heißen und getValue() gibt ein string zurück und keine Zahl. Also:
for (Map.Entry<String, String> pair: studentenDaten.entrySet()) { System.out.format("key: %s, value: %s\n", pair.getKey(), pair.getValue()); }
Das gibt aber jetzt nur key: Matrikelnummer, value: Lieblingsfach aus ?
Noch keine Daten aus der Klasse Daten.java
-
for (Entry<String, String> pair: studentenDaten.entrySet()) { System.out.format("key: %s, value: %d%n", pair.getKey(), pair.getValue()); } Kommt dann so eine For schleife ? .. die funktioniert aber irgendwie nicht
-
vor 1 Minute schrieb Whiz-zarD:
Nein. Das new Student() lassen wir weg. Mir war nicht klar, dass dies nicht gefordert ist.
Die Map soll nur mit der Matrikelnummer als Schlüssel und mit dem Lieblingsfach als Wert gefüllt werden. Was müssen wir denn jetzt nun aufrufen, um die HashMap zu füllen? Für die Liste verwenden wir add() aber für die HashMap wurde einen anderen Methodennamen gewählt. Wie ist der Methodenname und was müssen wir als Parameter in die Methode mitgeben?
studentenDaten.put(segs[1],segs[2]);
Token greift nicht auf die jeweilige Datei
in Java
Geschrieben
Soweit ich es aus dem Morpheus Tutorial herausnehmen kann erstellt es selber die Variablen.