[英]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++的指針。 在這種情況下,您擁有對整個對象的引用,而不是對您之前嘗試擁有的對象的各個屬性的引用。
將對象視為一張紙,將列表視為一個盒子。 您可以將各種數據放在紙上,然后將紙放入盒子中。 當您需要一個新對象時,您會得到一張新紙,在上面寫下數據,然后將其添加到盒子中。 然后當你想更新一個對象時,你可以在框中找到它並更新數據。 就這么簡單。 您可以擁有一個復雜對象,其中包含其他對象的實例,但這超出了您的問題范圍。
班級teacher
和student
應大寫為Teacher
和Student
。 Teachers
列表應命名為“教師”,單個Teacher
對象應命名為“教師”,或者不會與班級名稱混淆的名稱。 通常,列表應為復數,單數實例應為單數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.