2016-07-09 12 views
0

Ich versuche, eine Studenten-Datenbank für mein Abschlussprojekt in dem College-Kurs, den ich mache, zu machen. Die Anforderungen lauteten, eine HashMap als Datenbank zu verwenden, aber ich wollte eine TreeMap verwenden, so dass der Benutzer keine ID-Nummern als Schlüssel eingeben musste. Hier ist meine Schüler Klasse:Java: Verwenden einer TreeMap zum Speichern von Klassenobjekten

public class Student { 

    private static String name; 
    private static String major; 

    public Student(String name, String major) { 
     this.name = name; 
     this.major = major; 
    } 
} 

Hier ist meine Erklärung für die Schüler TreeMap:

private TreeMap<Integer, Student> studentsMap = new TreeMap<>(); 

Und hier ist der Code, den ich verwenden, um neue Schüler in der TreeMap zu setzen:

private void insertStudent() { 
    Student newStudent = new Student(nameTxt.getText(), majorTxt.getText()); 
    studentsMap.put(Integer.parseInt(idTxt.getText()), newStudent); 
} 

Das Problem, das ich habe, ist jedes Mal, wenn Sie einen neuen Schüler eingeben, wird jeder zuvor erstellte Schüler in der TreeMap überschrieben, um der neu eingegebene Schüler zu sein. Zum Beispiel betrete ich John, Science als ersten Schüler. Die TreeMap enthält 1 Eintrag mit einem Schlüssel: 0, Name: John, Hauptfach: Science. Wenn ich versuche, einen anderen Schüler einzufügen (zum Beispiel: Bob, Math), überschreibt es bei der Ausführung der Zeile Student newStudent den vorherigen Eintrag mit dem neu erstellten Schüler (Schlüssel: 0, Name: Bob, Major: Math). Ich denke, das liegt daran, dass es newStudent in der TreeMap als Schlüssel 0 speichert, und wenn ich einen neuen newStudent erstelle, ändert sich der vorherige newStudent in der TreeMap. Ich kann den richtigen Weg nicht finden.

Bearbeiten: Wie ich im folgenden Kommentar gesagt habe, habe ich mein Problem behoben. Name und Dur waren statisch, daher hat jede Instanz von Student denselben Namen und denselben Major. Der Code unten fixiert mein Problem:

public class Student { 

    private String name; 
    private String major; 

    public Student(String name, String major) { 
     this.name = name; 
     this.major = major; 
    } 
} 

Dank Sotirios Delimanolis für auf die andere Frage verknüpft, die mir mein Problem herauszufinden geholfen.

+0

Was ist idTxt? –

+0

Am wahrscheinlichsten Integer.parseInt (idTxt.getText()) gibt immer die gleiche Ganzzahl zurück. als Wert –

+0

Bitte geben Sie den Code für den idTxt ein. –

Antwort

-1

TreeMap Arbeiten mit key,value Paaren, wenn Sie nicht bestimmte Tasten in put oder get Methode verwenden Sie dann wäre es nicht richtig funktionieren, und wenn Sie gleiche Schlüssel verwenden (0) bis put etwas in TreeMap, dann wird es sein überschrieben mit anderen Worten Wenn die Map zuvor eine Zuordnung für den Schlüssel enthielt, wird der alte Wert ersetzt. am Ende: Sie sollten Ihre ID-Wert überprüfen, um sicherzustellen, dass es nicht den gleichen Wert wie Null wiederholt.

Ich hoffe, das hilft Ihnen.

+0

Ich frage wen hatte unten zu meiner Antwort, können Sie erklären, warum bitte? –