2017-11-16 7 views
1

Ich habe gerade angefangen Java zu lernen und ich versuche eine Anwendung zu erstellen, um Studenten zu registrieren.Bestimmte Instanz der Klasse finden?

Basierend auf dieser Frage how-would-i-create-a-new-object... Ich erstellte eine while-Schleife, um eine Instanz einer Klasse zu erstellen.

public class RegStudent { 

    ArrayList<Student> studentList = new ArrayList<>(); 

    Scanner input = new Scanner(System.in); 

    public void reggaStudent(int start) { 

     while (start != 0) { 
      String programNamn, studNamn; 
      int totalPoint, antalKurser; 

      System.out.println("Vad heter programmet?"); 
      programNamn = input.nextLine(); 
      System.out.println("Vad heter studenten"); 
      studNamn = input.nextLine(); 
      System.out.println("Hur många poäng har studenten?"); 
      totalPoint = input.nextInt(); 
      System.out.println("Hur många kurser är studenten registrerad på?"); 
      antalKurser = input.nextInt(); 

      // Add student to list of students 
      studentList.add(new Student(totalPoint, antalKurser, 
             programNamn, studNamn)); 
      System.out.println("Vill du registrera in en fler studenter? " 
           + "Skriv 1 för ja och 0 för nej"); 
      start = input.nextInt(); 
      input.nextLine(); 
     } // End of whileloop 

    } 
} 

Die Klasse ist:

public class Student { 
    private int totalPoint; 
    private int antalKurser; 
    private String programNamn; 
    private String studNamn; 
    private static int counter; 

    public Student(int totalPoint, int antalKurser, String program, String studNamn) { 

     this.totalPoint = totalPoint; 
     this.antalKurser = antalKurser; 
     this.programNamn = program; 
     this.studNamn = studNamn; 
     counter++; 
    } 

    public int getTotalPoint() { 
     return totalPoint; 
    } 

    public void setTotalPoint(int totalPoint) { 
     this.totalPoint = totalPoint; 
    } 

    public int getAntalKurser() { 
     return antalKurser; 
    } 

    public void setAntalKurser(int antalKurser) { 
     this.antalKurser = antalKurser; 
    } 

    public String getProgramNamn() { 
     return programNamn; 
    } 

    public void setProgramNamn(String programNamn) { 
     this.programNamn = programNamn; 
    } 

    public String getStudNamn() { 
     return studNamn; 
    } 

    public void setStudNamn(String studNamn) { 
     this.studNamn = studNamn; 
    } 
    public static int getCount(){ 

     return counter; 
    } 
    @Override 
    public String toString() { 

     return String.format(" Namn: %s, Program: %s, Antal poäng: %d, " 
     + "Antal kurser: %d\n ", studNamn, programNamn, totalPoint, antalKurser); 
    } 

} 

Wie gehe ich über die Instanzvariablen in bestimmten Instanz zu erhalten und eingestellt? Ich finde die Instanzen.

Ich verstehe, dass es schlechtes Design sein könnte, aber in diesem Fall würde ich einige Eingabe schätzen, wie man einen Fall löst, wo ich eine unbekannte Anzahl von Studenten instanziieren möchte.

Ich habe einen Zähler hinzugefügt, nur um zu sehen, dass ich tatsächlich einige Instanzen der Klasse erstellt habe.

+0

Ich verstehe überhaupt nicht, was Sie fragen. Möchten Sie wissen, wie Sie einen bestimmten Schüler von Ihrer Liste bekommen können? Zum Beispiel mit Namen (StugNamn)? –

+0

Was ist 'studentList'? Wie wird es erklärt? –

+0

Ja, genau! Oder setzen Sie totalPoint oder andere Variablen. – Garnbutik

Antwort

2

Sie einfach abfragen Objekte für bestimmte Eigenschaften, wie:

for (Student student : studentList) { 
    if (student.getProgramName().equals("whatever")) { 
    some match, now you know that this is the student you are looking for 

Mit anderen Worten: wenn Sie Objekte innerhalb einer Sammlung haben, und Sie wollen ein/mehrere Objekte mit bestimmten Eigenschaften erwerben ... Sie dann Wiederholen Sie die Sammlung und testen Sie jeden Eintrag anhand Ihrer Suchkriterien.

Alternativ können Sie eine Eigenschaft "externalisieren" und Objekte beispielsweise in Maps einfügen.

+0

Natürlich, danke! Ich weiß nicht, warum ich eine komplexere Lösung erwartet habe. Lies über Maps, aber denke, dass ich schon übermütig bin, seit ich gerade mit Java (und Programmierung) angefangen habe. – Garnbutik

+0

hm, immer noch nicht wirklich wie man zum Beispiel einen neuen Namen setzen kann. Nach einer Stunde gesucht, kann aber keine Lösung finden.Muss ich nicht den Index des spezifischen Elements finden, für das ich einen neuen Wert festlegen möchte? Wenn ich studentList.set (1, "Peter") dann brauche ich den Index, aber ich kann keinen Weg finden, den Index zu bekommen, wenn die Liste ein Objekt einer Klasse ist, dh enthält mehrere Instanzvariablen, die ist verschiedene Typen. – Garnbutik

+0

In meinem Beispiel - Sie bereits diese "Student" Variable, die auf das aktuelle Element in der Sammlung verweist. Wenn Sie jetzt eine Setter-Methode für diese Referenz aufrufen, wird das entsprechende Objekt aktualisiert. Ich hoffe, dass hilft, wenn nicht, lassen Sie mich einen Kommentar und ich werde sehen, was ich morgen tun kann. – GhostCat

0
studentList.add(new Student(totalPoint, antalKurser, 
            programNamn, studNamn)); 

Sie haben nun Ihre Student Objekte in einer Liste. Ich nehme an, Sie haben etwas wie

List<Student> studentList = new ArrayList<>(); 

irgendwo in Ihrem Code. Nachdem Sie die Liste mit Student-Objekten gefüllt haben, können Sie sie zum Suchen von Instanzen verwenden. Sie müssen entscheiden, welche Kriterien für eine Suche zu verwenden sind. Möchten Sie einen Studenten mit einem bestimmten Namen finden? Möchtest du alle Schüler in einem bestimmten Programm finden? Möchten Sie Schüler mit mehr als einer bestimmten Anzahl von Punkten finden?

Vielleicht möchten Sie jeden von diesen tun. Beginnen Sie damit, eine auszuwählen und holen Sie sich dann ein Stück Papier, um ein paar Ideen auszuarbeiten, wie Sie die Suche durchführen würden. Angenommen, Sie möchten einen Studenten mit dem Namen "Bill" finden. Stellen Sie sich vor, Sie hätten einen Stapel Karten mit Informationen über Schüler bekommen. Dieser Kartenstapel repräsentiert die Liste in Ihrem Programm. Wie würden Sie diesen Kartenstapel nach der Karte mit Bills Namen durchsuchen? Beschreiben Sie die erforderlichen Schritte in Worten. Mach dir keine Sorgen darüber, wie du das noch programmieren wirst. Der erste Schritt beim Schreiben eines Computerprogramms besteht darin, die Lösung in kleine Schritte zu zerlegen. Nachdem Sie eine klare Vorstellung davon haben, wie Sie dies manuell in der physischen Welt tun können, können Sie Ihre Beschreibung in Java-Code übersetzen.

Verwandte Themen