Hashset

Ich hab ein paar Fragen zu einem Übungsbeispiel, Ich muss ein Hashset implementieren und dieses alphabetisch nach dem Nachnamen von Studenten ausgeben, zusätzlich soll ich einen neuen Studenten anlegen, nach bestimmten Studenten suchen (durch Nummer oder Name) und bestimmte Studenten löschen können. Irgendwie komm ich nicht weiter hätte jemand Lösungsvorschläge?
Java:
class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        Set<Student> studi = new HashSet<>();

        studi.add(new Student(1, "Mustermann", "Max", "m"));
        studi.add(new Student(2, "Müller", "Bernd", "m"));
        studi.add(new Student(3, "Bauer", "Franz", "m"));

        Iterator<Student> it = studi.iterator();

        int input;

        while (it.hasNext()) {

            System.out.println("Wählen Sie zwischen 1-4");
            System.out.println("1 = Student anlegen");
            System.out.println("2 = Student suchen");
            System.out.println("3 = Student löschen");
            System.out.println("4 = Liste ausgeben");
            System.out.println("5 = Beenden");

            input = sc.nextInt();
            switch (input) {
                case 1:

                    System.out.println("Geben Sie die Daten des Studenten ein");
                    System.out.println("Geben Sie die Matrikelnummer an!");
                    int MatrNr = sc.nextInt();
                    System.out.println("Geben Sie ihren Nachnamen an!");
                    String Nachname = sc.next();
                    System.out.println("Geben Sie ihren Vornamen an!");
                    String Vorname = sc.next();
                    System.out.println("Geben Sie das Geschlecht an");
                    String Geschlecht = sc.next();
                    System.out.println("Student wurde angelegt!");
                    Student student = new Student(MatrNr, Nachname, Vorname, Geschlecht);
                    studi.add(student);
                    System.out.println(student);

                    break;

                case 2:

                    break;
                case 3:

                    break;

                case 4:
                    for (Student studenten : studi) {
                        System.out.println(it.next());
                    }
                    break;
                case 5:
                    System.out.println("Programm wurde beendet!");
                    System.exit(0);
                    break;

            }

        }

    }
}
Code:
class Student {

    int MatrNr;
    String Vorname;
    String Nachname;
    String Geschlecht;

    public Student(int MatrNr, String Nachname, String Vorname, String Geschlecht) {
        this.MatrNr = MatrNr;
        this.Vorname = Vorname;
        this.Nachname = Nachname;
        this.Geschlecht = Geschlecht;
    }

    public int getMatrNr() {
        return MatrNr;

    }

    public String getVorname() {
        return Vorname;

    }

    public String getNachname() {
        return Nachname;

    }

    public String getGeschlecht() {
        return Geschlecht;

    }

    public void setMatrNr(int MatrNr) {
        this.MatrNr = MatrNr;

    }

    public void SetVorname(String Vorname) {
        this.Vorname = Vorname;

    }

    public void SetNachname(String Nachname) {
        this.Nachname = Nachname;

    }

    public void SetGeschlecht(String Geschlecht) {
        this.Geschlecht = Geschlecht;

    }

    @Override
    public String toString() {
        return "MatrNr = " + MatrNr + ", Nachname = " + Nachname + ", Vorname = " + Vorname + ", Geschlecht = " + Geschlecht;
    }

}
Code:
public class meinComp implements Comparator<Student> {

    @Override
    public int compare(Student a , Student b) {
        return a.getNachname().compareTo(b.getNachname());
    }
}
 

httpdigest

Top Contributor
Tja, dann sollst du das wohl machen. Was hast du von der HashSet-Implementierung/Klasse schon umgesetzt (da du ja offensichtlich bereits eine HashSet Klasse benutzt ... hoffentlich nicht die aus java.util) und wo ist jetzt genau das Problem?
 

MoxxiManagarm

Top Contributor
Das passt ja schon nicht:

Java:
Set<Student> studi = new HashSet<>();
// adding students
Iterator<Student> it = studi.iterator();
int input;
while (it.hasNext()) {

Wieso solltest du die Menü-Auswahl so oft machen wollen wie du Studenten hast?

Java:
@Override
public int compare(Student a , Student b) {
  return a.getNachname().compareTo(b.getNachname());
}

Wenn du Pech hast steht dann aber Anna Müller erst nach Berta Müller.
 
Zuletzt bearbeitet:
Mein Problem ist dass ich die Reihenfolge nicht hinbekomme, könnte man das Hashset mit einem Tree sortieren lassen? Außerdem kann ich keinen Studenten zu meinem Set über die Benutzereingabe hinzufügen da stürzt mein Programm immer ab.
 

MoxxiManagarm

Top Contributor
Eine Hashtabelle ist übrigens nicht HashSet. Ein Set ist eine Menge von Unique Elemente. Selbst wenn du ein TreeSet verwendest wirst du ein Problem bekommen, wenn du diesen Comparator verwendest und ein Student den gleichen Namen trägt, aber eine andere Person ist. Du solltest die Haltung des Studenten von der sortierten Ausgabe unbedingt trennen.
 

MoxxiManagarm

Top Contributor
Ich glaube nicht, dass dein Programm beim Einfügen abstürzt, sondern bei der Ausgabe. Deine while-Schleife bezieht sich auf den Iterator, welcher der zuvor hinzugefügten Elemente erhält. Und bei der Ausgabe verwendest du eben jenen Iterator und iterierst ihn bis zum Ende durch.

Java:
class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        Set<Student> studi = new HashSet<>();

        studi.add(new Student(1, "Mustermann", "Max", "m"));
        studi.add(new Student(2, "Müller", "Bernd", "m"));
        studi.add(new Student(3, "Bauer", "Franz", "m"));

         // ENTFERNEN: Iterator<Student> it = studi.iterator();

        int input;

        do { // do-while

            System.out.println("Wählen Sie zwischen 1-4");
            System.out.println("1 = Student anlegen");
            System.out.println("2 = Student suchen");
            System.out.println("3 = Student löschen");
            System.out.println("4 = Liste ausgeben");
            System.out.println("5 = Beenden");

            input = sc.nextInt();
            switch (input) {
                case 1: //...
                    break;
                case 2: //...
                    break;
                case 3: // ...
                    break;
                case 4:
                    for (Student student : studi) {
                        System.out.println(student); // nimm das iterierte Element
                    }
                    break;
                case 5:
                    System.out.println("Programm wurde beendet!");
                     // UNNÖTIG System.exit(0);
                    break;
                default: // empfohlene Ergänzung
                    System.out.println("Unbekannte Eingabe");
            }
        } while(input != 5);
    }
}
 
Danke das hat mir schon mal geholfen :)
Jetzt hätt ich noch das Problem mit dem suchen nach bestimmten Studenten anhand einer Benutzereingabe eines bestimmten Namens und das löschen von bestimmten Studenten hab leider echt keine Ahnung wie man das schreiben soll :(
 

MoxxiManagarm

Top Contributor
Na so wie die Ausgabe von allen Studenten auch.

Beispiel:
Java:
private void printStudentMitNummer(int matrikelnummer) {
        for(Student student : studenten) {
            if(student.getMatrikelNummer() == matrikelnummer) {
                System.out.println(student);
            }
        }
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
volcanos HashSet und Iterator -> Falsche Sortierreihenfolge ? Java Basics - Anfänger-Themen 18
D Erste Schritte Code verstehen - HashSet Java Basics - Anfänger-Themen 8
J HashSet Methode contains liefert false (hash Methode überschrieben) Java Basics - Anfänger-Themen 3
W Element aus HashSet in String umformen Java Basics - Anfänger-Themen 7
T HashSet in List-Object Java Basics - Anfänger-Themen 5
C Auf einzelne Werte aus HashSet zugreifen Java Basics - Anfänger-Themen 10
J Klassen HashSet, TreeSet: unregelmäßige Zahlenreihen beim Befüllen Java Basics - Anfänger-Themen 7
T Methoden HashSet Objekt mit Zufallszahlen befüllen Java Basics - Anfänger-Themen 3
J Verstehe meine HashSet Ausgabe nicht Java Basics - Anfänger-Themen 5
W Verknüpfung von Räumen mit Hashset Java Basics - Anfänger-Themen 10
J HashSet contain Methode funktioniert nicht wie gewollt Java Basics - Anfänger-Themen 7
M Collections HashSet verständnisproblem Java Basics - Anfänger-Themen 9
R Hashset.add(Array) liefert immer true? Java Basics - Anfänger-Themen 23
Mrtwomoon Collections Hashset elemente ohne Eckigeklammer ausgeben Java Basics - Anfänger-Themen 9
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
A Elemente in HashSet enthalten oder nicht Java Basics - Anfänger-Themen 6
A HashSet (oder besser geignetes) Java Basics - Anfänger-Themen 14
T Hashset - Allgemeine Fragen Java Basics - Anfänger-Themen 19
J So ähnlich wie HashSet Java Basics - Anfänger-Themen 2
D HashSet vs Liste Java Basics - Anfänger-Themen 5
T HashSet Java Basics - Anfänger-Themen 3
F suche Elemente in HashSet Java Basics - Anfänger-Themen 5
E Collections HashSet - Ausgabe sortiert? Java Basics - Anfänger-Themen 3
J HashSet Fehlerhaft Java Basics - Anfänger-Themen 10
J HashSet Implementierung Java Basics - Anfänger-Themen 16
D Problem mit HashSet Java Basics - Anfänger-Themen 12
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
B Hashset iterieren problem Java Basics - Anfänger-Themen 3
C HashSet Problem Java Basics - Anfänger-Themen 3
DasBrot Datentypen HashSet contains() Java Basics - Anfänger-Themen 3
F HashSet u. LinkedHashSet Zugriff auf Werte? Java Basics - Anfänger-Themen 2
F HashSet und LinkedHashSet Instanzierung warum so? Java Basics - Anfänger-Themen 7
M HashSet.contains() Java Basics - Anfänger-Themen 2
N Map<String, HashSet<String>> Umwandeln in Map<String, ArrayList<String>> Java Basics - Anfänger-Themen 14
neurox Limit bei HashSet? Java Basics - Anfänger-Themen 2
Povlsen84 HashSet mit eigenen Datentypen Java Basics - Anfänger-Themen 6
G HashSet vs. TreeSet Java Basics - Anfänger-Themen 3
G hashset überschreibt werte bei add Java Basics - Anfänger-Themen 1
G Wie mach ich ein HashSet für eigene Objecte? Java Basics - Anfänger-Themen 9
M HashSet Initialisierungsgröße? Java Basics - Anfänger-Themen 5
F doppelte Elemente in HashSet Java Basics - Anfänger-Themen 5
G Probleme mit HashSet Java Basics - Anfänger-Themen 5
S HashSet in HashMap, Zugriff Java Basics - Anfänger-Themen 3
G Zahlen aus HashSet in ein int Array übergeben Java Basics - Anfänger-Themen 15
G Hashset verknüpfen mit BufferedReader Java Basics - Anfänger-Themen 18
L Was ist ein HashSet? Java Basics - Anfänger-Themen 33
G HashSet Java Basics - Anfänger-Themen 21
P HashSet und Referenzen Java Basics - Anfänger-Themen 9
B Warum hat HashSet kein get(Object o) ? Java Basics - Anfänger-Themen 8
H umwandeln zu Hashset ?! Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben