Zum Inhalt springen

java_anfaenger

Mitglieder
  • Gesamte Inhalte

    68
  • Benutzer seit

  • Letzter Besuch

Beiträge von java_anfaenger

  1. vor 4 Minuten schrieb Whiz-zarD:

    Du hast gerade mit einer Methode gearbeitet: split().
    Und du arbeitest gerade in der Main()-Methode.

    Methoden sind Funktionseinheiten (sog. Unterprogramme), die etwas tun. split() splittet den string und die add()-Methode der Liste fügt etwas in die Liste ein und welche Methode gibt es nun, etwas in die HashMap einzufügen? Und wie muss sie aufgerufen werden?

     

     

     

    studentenDaten.add("");

  2. vor 1 Minute schrieb Whiz-zarD:

    Bingo.

    Also haben wir jetzt alle Informatinen, die wir brauchen, um die HashMap zu füllen. Ja, jetzt kommt die HashMap. Um das etwas zu vereinfachen, sage ich erstmal, dass die Matrikelnummer kein integer ist, sondern ein string. Wir haben dann folgende HashMap:

    
    HashMap<string, string> studentenDaten = new HashMap<string, string>();

    Der Schlüssel (Key) ist die Matrikelnummer und er Wert (Value) ist das Lieblingsfach.

    Mit welcher Methode können wir nun Werte in die HashMap schreiben und wie muss der Aufruf, der Methode aussehen, wenn segs[1] die Matrikelnummer und segs[2] das Lieblingsfach ist?

     

     

    Was meinst du mit Methode ?

  3. vor 1 Minute schrieb Whiz-zarD:

    Nein. Wieso willst du nun nach "Lieblingsfach" splitten? Nochmal... Welches Zeichen trennt die Informatinen voneinander?
    Du hattest es doch gerade richtig...

    Und wie kannst du dann auf die einzelnen Strings in einem Array zugreifen? Das kannst du hier nachlesen.

     

     

     

    Ich splitte doch nicht nach Lieblingsfach das habe ich gerade geändert ist mir auch aufgefallen scheint als würde es nicht anzeigen.

  4. vor 5 Minuten schrieb Whiz-zarD:

    Array, das Strings enthält ist richtig. Wie kommst du darauf, dass es leer ist?

    Und wie kannst du nun auf die Strings im Array zugreifen?
    Oder anders: Wenn das Array nun aus 3 Strings besteht, wie kannst du nun ein String auf der Konsole ausgeben?

    
    System.out.println( Arrays.toString(segs) );

    Dieser Code gibt ja alles aus, was im Array steht. Wie gibst du aber nun ein String aus diesem Array aus?

    Ergibt das dann Sinn also verstehe es langsam können wir bitte weiter machen :D

     

    public static void main(String[] args) {
    	    	String path = "Name;Matrikelnummer;Lieblingsfach";
    	    	String[] segs = path.split( Pattern.quote( ";" ) );
    	    	System.out.println( Arrays.toString(segs) );
    	    	for(int i = 0; i< segs.length ; i++) {
    	    		System.out.println("Lieblingsfach"+i);
    	    	}

     

  5. vor 2 Minuten schrieb Whiz-zarD:

    Dann lass doch mal das Programm duchlaufen und schaue dir an, was da rauskommt.

    Welchen Datentyp besitzt die Variable segs?
    Und wie kannst du nun auf die Inhalte von segs zugreifen?
    Das kannst du hier (erstes Beispiel) nachlesen.

    Und wenn du das alles verstanden hast, dann können wir uns um die HashMap kümmern.

     

     

    String.

    Inhalte von segs zugreifen ? 

    meinst du mit get-Methode oder einfach System output ?

  6. vor 9 Minuten schrieb Whiz-zarD:

    So schwer ist das doch nicht...

    Schaue dir den String an "Test1;1111;Mathe". Durch welches Zeichen werden die drei Informationen getrennt?
    Und dann schaue dir mein Beispiel an "www.tutego.de". Durch welches Zeichen werden die drei Informationen getrennt?

    Schaue dir dann den Code an und finde den Fehler.

    UND VERGISS DIE HASHMAP! DIE KOMMT SPÄTER! DIE BRAUCHST DU NOCH NICHT!

    okey gut .. dann setze ich bei Pattern.quote(";") ein und jetzt .. .?

  7. vor 3 Minuten schrieb Whiz-zarD:

    Das geht schon in die richtige Richtung aber schaue dir doch dein Code genau an und führe ihn doch mal aus und guck, was passiert. In der Variable segs wird nichts drinnen stehen, wieso ist das so? Nach welchem Kriterium splittest du nun dein String? Oder noch mal anders gefragt: Was macht split() bei dir?

     

     

    Ich habe ein Beispiel dessen gesehen wie es ausschauen soll am Ende und da sehe ich nichts mit splitten ... das ist mein Problem was ich versuche dir zu erklären .. es muss doch irgendwie so funktionieren ..

     

    public class main {
    
    	    public static void main(String[] args) {
    	    	//String path = "Name;Matrikelnummer;Lieblingsfach";
    	    	//String[] segs = path.split( Pattern.quote( "." ) );
    	    	//System.out.println( Arrays.toString(segs) );
    	    	
    	    	List<String> studentenDaten = new ArrayList<String>();
    	    	Map<Integer, List<String>> alleDaten = new HashMap<Integer, List<String>>();
    	    	
    	    	for(Student student : alleDaten) {
    	    		String lieblingsfach = Student.getLieblingsfach();
    	    		Student studentfach = new Student(lieblingsfach, 0, lieblingsfach);
    	    		System.out.print("Lieblingsfach" + studentfach);
    	    	}
    	    	
    	    		
    	    }
    }

    Nur sagt der mir das alleDaten falsch ist in der for schleife, dass er nur über ein Array iterieren kann.

    Es ist wahrscheinlich effizienter mit der split methode, doch geht es nicht ohne ?

  8. vor 11 Minuten schrieb Whiz-zarD:

    Vergiss doch endlich meinen Code...

    Dein String besteht doch aus drei Informationen: Name, Matrikelnummer und Lieblingsfach und du willst auf Matrikelnummer und Lieblingsfach zugreifen können.  Schaue dir das Beispiel an. Hier passiert exakt das selbe:

    
    String path = "www.tutego.com";
    String[] segs = path.split( Pattern.quote( "." ) );
    System.out.println( Arrays.toString(segs) ); // [www, tutego, com]

    Der String besteht ebenfalls aus drei Informationen: Subdomain ("www"), Domain ("tugego") und Top-Level-Domain ("de").

    Wie muss also nun dein Code aussehen, um die Informationen zu trennen? Hier brauchst du überhaupt noch keine HashMap. Die brauchen wir erst später.

     public static void main(String[] args) {
    	    	String path = "Name;Matrikelnummer;Lieblingsfach";
    	    	String[] segs = path.split( Pattern.quote( "." ) );
    	    	System.out.println( Arrays.toString(segs) );

    So also?

  9. vor 14 Minuten schrieb Whiz-zarD:

    Weil du nie das machst, was man dir sagt... 🙄

    Wie teilst du den String mittels split() auf? Dafür brauchst du noch keine HashMap oder sonstigen Kram.

    Schaue dir dieses Beispiel an und versuche es, in deinen Anwendungsfall umzuändern:

    
    String path = "www.tutego.com";
    String[] segs = path.split( Pattern.quote( "." ) );
    System.out.println( Arrays.toString(segs) ); // [www, tutego, com]

     

    Ich verstehe dich nicht .. ich muss es doch nicht teilen wenn es einfach ein String ist und es definiert ist..kann ich doch einfach durch die Liste iterieren ..irgendwie so in dem Stil ..

    public class main {
    
    	    public static void main(String[] args) {
    	    	Map<Student, List<String>> studentdaten = new HashMap<Student, List<String>>();
    	    	
    	    	for(Student student : studentenDaten) {
    	    		String lieblingsfach = student.getlieblingsFach();
    	    		Student student = new Student(lieblingsfach);
    	    		System.out.print("Lieblingsfach" + student);
    	    	}
    	    }
    }

     

  10. vor 6 Minuten schrieb Whiz-zarD:

    Was soll denn dabei deiner Meinung da rauskommen? Die HashMap wird nirgends gefüllt.

    Lass die HashMap doch mal weg. Die brauchst du sowieso nicht, was ich schon Tausend Mal geschrieben habe und erzeuge einfach nur ein einzelnes Student-Objekt.

     

     

    Ich brauch für die Aufgabe die ich erledigen muss eine HashMap ich würde es gerne ja weglassen und über eine List durchlaufen lassen, aber das kann ich nicht in diesem Fall. Versuch es doch mal zu verstehen :)

  11. public class main {
    
    	    public static void main(String[] args) {
    	    	Map<String, Student> studentdaten = new HashMap<String, Student>();
    	    	
    	    	//Student student = studentdaten.get("Name;Matrikelnummer;Lieblingsfach");
    	    	Set<String> lieblingsfach = studentdaten.keySet();
    	    	
    	    	System.out.println(lieblingsfach);
    	    }

    Ich hab jetzt etwas recherchiert und möchte jetzt nur wissen warum ich als Ausgabe nur Output : []

    bekomme ?

  12. vor 1 Minute schrieb r4phi:

    Ich würde dir echt gerne Helfen und das Problem lösen, allerdings wäre der Lerneffekt für dich leider bei 0.
    Das macht meiner Meinung nach leider kein Sinn.

    Die Fehlermeldung sagt es ja bereits was das Problem ist.
    Schau dir die Klasse Student im Code an ...

    Ich habe meinen Code etwas geändert .. nur gibt der mir nichts aus .. 

     public static void main(String[] args) {
    	    	Map<Integer, Student> studentdaten = new HashMap<Integer, Student>();
    	    	
    	    	Student student = studentdaten.get("Name;Matrikelnummer;Lieblingsfach");
    	    	Set<Integer> namen = studentdaten.keySet();
    	    	for(Integer name : namen) {
    	    		System.out.println(name + "-->" + studentdaten.get(name) );

     

  13. List<Student> deserializedStudents = serializedStudents.stream()
    	                .map(Student::deserialize)
    	                .collect(Collectors.toList());

    Die Stelle in der zweiten und dritte Zeile ist fehlerhaft..sagt halt das die Klasse Student diese Funktion deserialize nicht definiert

     

    Exception in thread "main" java.lang.Error: Unresolved compilation problems:

    The method map(Function<? super String,? extends R>) in the type Stream<String> is not applicable for the arguments (Student::deserialize)

    The type Student does not define deserialize(String) that is applicable here

    Collectors cannot be resolved

  14. vor 4 Stunden schrieb Rienne:

    Viellicht wäre es mal ganz hilfreich, wenn du erst einmal erklärst, in welchem Zusammenhang du diese "Aufgabe" bearbeitest und dann die konkrete Aufgabenstellung postest, statt Code-Schnipsel und das, was du am Ende ausgegeben haben willst mit der Bedingung, dass es eine (Hash-)Map sein soll.

    • Starten Sie ein neues MainProgramm.

    • Holen Sie den ersten Datensatz bezüglich Lieblingsfächer. Gehen Sie die Daten-Zeilen durch und erzeugen Sie dementsprechend Student-Objekte.

    • Speichern Sie die Student-Objekte nicht in einer List, sondern in einer Map: Schlüssel: Matrikelnummer  Wert: Student-Objekt

    • Um die Implementierung zu vereinfachern, speichern Sie das Lieblingsfach als einen String und nicht als Fach-Objekt.

     

    Das ist die Aufgabenstellung ... die ich durcharbeiten muss

  15. vor 6 Stunden schrieb r4phi:

    Hier mal das ganze basierend auf deinen "studidaten"
    Deine Aufgabe ist es nun, wie @Whiz-zarD bereits gesagt hat: 

    Implementieren der deserialize Methode in der Studenten-Klasse.
    Wenn das geschafft ist dann wieder melden :) 

    
    package de.fachinformatiker;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    public class Main {
    
        public static void main(String[] args) {
            final List<String> serializedStudents = datenstudi();
    
            // Aus deinen Daten eine Liste von studenten objekten erzeugen.
            List<Student> deserializedStudents = serializedStudents.stream()
                    .map(Student::deserialize)
                    .collect(Collectors.toList());
    
            Map<Integer, Student> studentsMap = new HashMap<Integer, Student>();
            // jeden Studenten der Map hinzufügen wobei die Martrikelnummer der Key ist
            for (Student s : deserializedStudents) {
                studentsMap.put(s.getMatrikelnummer(), s);
            }
            
            // ODER
            // deserializedStudents.forEach(s -> studentsMap.put(s.getMatrikelnummer(), s));
    
            // ODER
            // Map<Integer, Student> studentsMap = deserializedStudents.stream().collect(Collectors.toMap(Student::getMatrikelnummer, s -> s, (a, b) -> b));
            
            // Ausgabe der Matrikelnummer und des Lieblingsfach in der Konsole
            // Die Map ausgeben
            for (Map.Entry<Integer, Student> entry : studentsMap.entrySet()) {
                Integer matrikelnummer = entry.getKey();
                String lieblingsfach = entry.getValue().getLieblingsfach();
                System.out.println("Martrikelnummer: " + matrikelnummer + "Lieblingsfach: " + lieblingsfach);
            }
            
            // ODER
            // studentsMap.forEach((k, v) -> System.out.println("Martrikelnummer: " + k + "Lieblingsfach: " + v.getLieblingsfach()));        
        }
    
    
        public static List<String> datenstudi() {
            List<String> studidaten = new ArrayList<String>();
    
            // Format:
            // Name ; Matrikelnummer ; Lieblingsfach
    
            studidaten.add("Test uno;999999;fach I");
            studidaten.add("Horst Lied;111111;fach II");
    
            return studidaten;
        }
    }
    
    class Student {
        private String name;
        private String lieblingsfach;
        private int matrikelnummer;
    
        public Student(String name, String lieblingsfach, int matrikelnummer) {
            this.name = name;
            this.lieblingsfach = lieblingsfach;
            this.matrikelnummer = matrikelnummer;
        }
    
        public String getName() {
            return this.name;
        }
    
        public String getLieblingsfach() {
            return this.lieblingsfach;
        }
    
        public int getMatrikelnummer() {
            return this.matrikelnummer;
        }
    
        public static Student deserialize(final String serializedString) {
            // Das musst du selbst implementieren...
    
            // Deinen "Datenstring" aufteilen
            // Die einzelnen Werte des Datenstrings nutzen um ein Studenten Objekt zu erstellen
            // new Student(name, lieblingsfach, matrikelnummer)
            // Objekt zurückliefern
            throw new UnsupportedOperationException("Das hier habe ich noch nicht implementiert");
        }
    }

     

    public static Student deserialize(final String serializedString) {
    	    	 
    	    	
    	    	String[]splitted = "name;Matrikelnummer;lieblingsfach".split(",");
    	    	new Student(Name,Matrikelnummer,Matrikelnummer);
    	    	
    	        
    	        throw new UnsupportedOperationException("Das hier habe ich noch nicht implementiert");
    	        
    	    }

    ist das mit dem splitten so richtig ?

  16. vor 1 Stunde schrieb Whiz-zarD:

    Stichwort ist hier "Deserialisierung" oder auf Neu-Deutsch "Mapping".

    Du schreibst eine Methode, die den String als Parameter übegeben bekommt und ein Student zurückgibt:

    
    private static Student deserialize(string data) {
      // ...
    }

    Und dann schreibst du halt einfach:

    
    HashMap<integer, Student> students = new HashMap<integer, Student>();
    Student student = deserialize("Test1;1111;Mathe");
    students.put(student.getMatrikelnummer(), student);
    student = deserialize("Test2;2222;Physik");
    students.put(student.getMatrikelnummer(), student);
    //...
      

    mit der Split()-Methode am String bekommst du ein Array von Strings
    und mit der Integer.parseInt()-Methode kannst du ein String in ein Integer wandeln.

    Viel spaß bei der Implementierung von deserialize(). Das kann auch mal deine Aufgabe sein. ;)

    Ich danke dir erstmals für den Anfang, doch ich hab echt kein Plan was da rein soll in die Student methode..
    wo in deinem Beispiel greifen wir auf die Liste von der Daten Klasse ein

  17. vor 19 Minuten schrieb Whiz-zarD:

    Dafür brauchst du keine Map...

    
    public static void main(String[] args) {
      // Liste erzeugen
      List<Student> studentenDaten = new ArrayList<Student>();
      // Liste mit Werten füllen
      studentenDaten.Add(new Student(...));
      ...
      
      // Über die Liste iterieren
      for(Stundent student : studentenDaten) {
        // Student auf der Konsole ausgeben
        System.out.println("Student: " + student.getMatrikelnummer() + " | " + "Lieblingsfach: " + student.getLieblingsfach());
      }
    }

    Eine Map wird benötigt, wenn du in einer Menge von Studenten einen bestimmten Studenten mittels der Matrikelnummer suchst:

    
    HashMap<integer, Student> students = new HashMap<integer, Student>();
    students.put(1111, new Student("Test1", 1111, "Mathe"));
      
    Student student = students[1111];
    System.out.println("Student: " + student.getMatrikelnummer() + " | " + "Lieblingsfach: " + student.getLieblingsfach());

     

    Aber ich hab doch eine String liste muss dann nicht integer zu String werden und dann würde put ja nicht funktionieren ?

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