-
Gesamte Inhalte
68 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von java_anfaenger
-
-
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("");
-
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 ?
-
vor 1 Minute schrieb Whiz-zarD:
Genau, wir fangen aber bei 0 an zu zählen.
Somit ist segs[2] das Lieblingsfach.Wie kann man nun also auf die Matrikelnummer zugreifen?
segs[1]
-
vor 3 Minuten 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.
String[0][3] oder nur String[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.
-
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
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); }
-
ein leerer Array vom Datentyp String
-
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 ?
-
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 .. .?
-
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 ?
-
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?
-
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); } } }
-
public class main { public static void main(String[] args) { Map<String, Student> studentdaten = new HashMap<String, Student>(); Student student = new Student("", 0, null); Set<String> lieblingsfach = studentdaten.keySet(); System.out.println(lieblingsfach); } }
Mein code sieht bis jetzt so aus ... ich weiß nicht weiter
-
vor 9 Minuten schrieb Whiz-zarD:
Dann fangen wir halt von vorne an.
Wie muss der Code denn aussehen, um aus "Test1;1111;Mathe" das Lieblingsfach herauszufiltern?
Die Methode split() wurde doch schon erwähnt. Hier steht alles, was man darüber wissen muss.
Das hatte ich auch gesehen, hab es versucht, aber leider kein Erfolg gehabt.
-
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
-
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 ?
-
vor 7 Minuten schrieb Whiz-zarD:
Ich würde vorschlagen, mit einem Tutorial anzufangen. So wird das nichts. Der komplette Code macht überhaupt keinen Sinn.
Ich würde euch ja nicht um Hilfe bitten, wenn ich es verstehen würde ...
-
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) );
-
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
-
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
-
-
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 meldenpackage 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 ?
-
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 -
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 ?
-
vor 17 Minuten schrieb Whiz-zarD:
Dann tu es doch.
HashMap<integer, Student> studentenDaten = new HashMap<integer, Student>(); // Liste mit Werten füllen studentenDaten.put(..., new Student(...)); ...
Und was hast du damit dann vor?
Ich möchte doch die Lieblingsfächer ausgeben mit der Matrikelnummer
Schlüssel : Matrikelnummer - > Wert : Student-Objekt
Wie kann ich eine Map erzeugen aus Daten einer anderen Klasse ?
in Java
Geschrieben · Bearbeitet von java_anfaenger
studentenDaten.put(segs[1],segs[2]);