Zum Inhalt springen

java_anfaenger

Mitglieder
  • Gesamte Inhalte

    68
  • Benutzer seit

  • Letzter Besuch

Beiträge von java_anfaenger

  1. 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

  2. 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

  3. 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 

  4. 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();
    		}
    	}

     

  5. 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 :)

  6. 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

  7. 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

  8. 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

     

  9. 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 ?

  10. //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.

  11. 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 ?

  12. 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

     

  13. 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 

  14. 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

  15. 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]);

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...