簡體   English   中英

當我打印出我的列表時,它會為我的所有值打印出 null..... 我該如何解決這個問題???? 我想學習如何解決這個問題以備將來使用

[英]When I print out my list it prints out null for all my values..... How do I fix this issue???? I want to learn how to fix this issue for future

我為我的老師列了一份清單並打印出來。 列表打印,但問題是我的列表為我的列表中的所有值打印出空值。 它為我提供了名字、姓氏、ID 和課程的空值。 我究竟做錯了什么??? 我怎樣才能解決這個問題? 我希望能夠在我的教師列表中打印出我的實際值。 如果我完全誠實,我看不出有什么問題。 我將名字、姓氏、id 和課程正確添加到教師列表中。 那我錯過了什么???

錯誤: 在此處輸入圖片說明

Main.java 代碼:

package SchoolSystem;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.TimeUnit;

public class main{
    public static void main(String[] args) throws InterruptedException {

        int ch; //user choice
        teacher teachers = new teacher();
        student students = new student();
        //add teachers
        List<teacher> teach = new ArrayList<>();
        teach.add(new teacher(teachers.first_name, teachers.last_name, teachers.teacher_id, teachers.course));
        Scanner sc = new Scanner(System.in);

        loop : while (true) {
            //menu
            System.out.println("");
            System.out.println("1: Add Teacher"); //user can add a teachers name, id, and course
            System.out.println("2: Add Student"); //user can add a students name, id, courses, and GPA
            System.out.println("3: All Teachers"); //user can access teacher list and change items
            System.out.println("4: All students"); //user can access student list and change items
            System.out.println("5: Exit Program");
            System.out.print("Enter your choice: ");
            ch = sc.nextInt();
            System.out.println("");
            switch (ch) {
                case 1:
                    System.out.println("Enter teacher's first name: ");
                    teachers.first_name = sc.next();
                    System.out.println("Enter teacher's last name: ");
                    teachers.last_name = sc.next();
                    System.out.println("Enter teacher's id: ");
                    teachers.teacher_id = sc.next();
                    System.out.println("Enter teacher's course: ");
                    teachers.course = sc.next();
                    break;

                case 2:
                    System.out.println("Enter student's first name: ");
                    students.first_name = sc.next();
                    System.out.println("Enter student's last name: ");
                    students.last_name = sc.next();
                    System.out.println("Enter student's id: ");
                    students.student_id = sc.next();
                    System.out.println("Enter student's course: ");
                    students.course = sc.next();
                    break;

                case 3:
                    System.out.println("-----------------------------------------------------------------------------");
                    System.out.printf("%1s %20s %5s %5s", "FIRSTNAME", "LASTNAME", "ID", "COURSE");
                    System.out.println();
                    System.out.println("-----------------------------------------------------------------------------");
                    for(teacher teacher: teach){
                        System.out.format("%1s %20s %5s %5s",
                                teacher.getFirstName(), teacher.getLastName(), teacher.getId(), teacher.getCourse());
                        System.out.println();
                    }
                    System.out.println("-----------------------------------------------------------------------------");
                    break;

                case 4:
                    //null
                    break;

                case 5:
                    /*
                    System.out.println("Exiting Program....");
                    TimeUnit.SECONDS.sleep(3);
                    System.out.println("Goodbye!");
                    break loop;
                     */
                    break;

                default:
                    //System.out.println("Invalid choice! Please enter an option (1 - 5)");
            }
        }
    }
}

老師.java代碼:

package SchoolSystem;

public class teacher {
    public teacher() {
        //null
    }

    public String first_name;
    public String last_name;
    public String teacher_id;
    public String course;

    public teacher(String first_name, String last_name, String teacher_id, String course) {
        this.first_name = first_name;
        this.last_name = last_name;
        this.teacher_id = teacher_id;
        this.course = course;
    }

    //return firstname
    public String getFirstName() {
        return first_name;
    }

    //return lastname
    public String getLastName() {
        return last_name;
    }

    //return teacherId
    public String getId() {
        return teacher_id;
    }

    //return course
    public String getCourse() {
        return course;
    }
}

在教師課堂中,您必須添加二傳手

公開課老師{

public Teacher() {
    //null
}

public String first_name;
public String last_name;
public String teacher_id;
public String course;

public Teacher(String first_name, String last_name, String teacher_id, String course) {
    this.first_name = first_name;
    this.last_name = last_name;
    this.teacher_id = teacher_id;
    this.course = course;
}

//return firstname
public String getFirstName() {
    return first_name;
}

public void setFirstName(String firstName) {
   this.first_name = firstName;
}

//return lastname
public String getLastName() {
    return last_name;
}

public void setLastName(String lastName) {
    this.last_name = lastName;
 }

//return teacherId
public String getId() {
    return teacher_id;
}

public void setId(String id) {
    this.teacher_id = id;
 }

//return course
public String getCourse() {
    return course;
}

public void setCourse(String course) {
    this.course = course;
 }

}

在 Main 中刪除此行

teach.add(new Teacher(teachers.getFirstName(), teacher.getLastName(), teacher.getId(), teacher.getCourse()));

和寫:

int ch; //user choice
        
        //add teachers
        List<Teacher> teach = new ArrayList<>();
        Scanner sc = new Scanner(System.in);

        //          teach.add(new Teacher(teachers.getFirstName(), teacher.getLastName(), teacher.getId(), teacher.getCourse()));

        loop : while (true) {
            //menu
            System.out.println("");
            System.out.println("1: Add Teacher"); //user can add a teachers name, id, and course
            System.out.println("2: Add Student"); //user can add a students name, id, courses, and GPA
            System.out.println("3: All Teachers"); //user can access teacher list and change items
            System.out.println("4: All students"); //user can access student list and change items
            System.out.println("5: Exit Program");
            System.out.print("Enter your choice: ");
            ch = sc.nextInt();
            System.out.println("");
            switch (ch) {
                case 1:
                    Teacher teachers = new Teacher();
                    System.out.println("Enter teacher's first name: ");
                    teachers.setFirstName(sc.next());
                    System.out.println("Enter teacher's last name: ");
                    teachers.setLastName(sc.next());
                    System.out.println("Enter teacher's id: ");
                    teachers.setId(sc.next() );
                    System.out.println("Enter teacher's course: ");
                    teachers.setCourse (sc.next());

                    teach.add(teachers);
                    
                    break;

                case 2:
                // .....

使用 setter 添加值並將“教師”對象添加到 List

teach.add(teachers);

您的代碼存在 OOP 問題。

teacher teachers = new teacher();
...
List<teacher> teach = new ArrayList<>();
teach.add(new teacher(teachers.first_name, teachers.last_name, teachers.teacher_id, teachers.course));

此代碼段采用一個新的teacher實例,然后創建一個全新的teacher實例以添加到列表中。 這是兩個不同的對象。 我假設您來自 C 或 C++ 並且您將它們視為指針? 幸運的是,這不是 Java 的工作方式。

您可以簡單地將“teachers”變量添加到“teach”列表中。 然后當您稍后更新“teachers”對象時,數據將在“teach”列表中可用。

需要注意的是,您需要在循環內為“教師”實例化一個新對象,並移動修改后的teach.add(teachers); 進入循環。

List<teacher> teach = new ArrayList<>();
List<student> stud = new ArrayList<>();
Scanner sc = new Scanner(System.in);

loop : while (true) {
    ...
    switch (ch) {
        case 1:
            teacher teachers = new teacher();
            ...
            teach.add(teachers);
            break;
        case 2:
            student students = new student();
            ...
            stud.Add(students);
            break;
        ...

現在,您為每位教師創建了一個新的teacher對象,以及一個僅包含有效數據而非空對象的列表。

這是有效的,因為“teach”現在包含對“teachers”實例的引用。 這類似於我之前提到的C和C++的指針。 在這種情況下,您擁有對整個對象的引用,而不是對您之前嘗試擁有的對象的各個屬性的引用。

將對象視為一張紙,將列表視為一個盒子。 您可以將各種數據放在紙上,然后將紙放入盒子中。 當您需要一個新對象時,您會得到一張新紙,在上面寫下數據,然后將其添加到盒子中。 然后當你想更新一個對象時,你可以在框中找到它並更新數據。 就這么簡單。 您可以擁有一個復雜對象,其中包含其他對象的實例,但這超出了您的問題范圍。

附注

班級teacherstudent應大寫為TeacherStudent Teachers列表應命名為“教師”,單個Teacher對象應命名為“教師”,或者不會與班級名稱混淆的名稱。 通常,列表應為復數,單數實例應為單數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM