每次我遍历循环时对象都被覆盖
Objects are being overwritten each time i iterate over the loop
我添加新学生对象的每次迭代都会覆盖以前的对象并在整个列表中包含相同的对象。我尝试使用链接列表和数组列表,但仍然遇到同样的问题。如果有人愿意指导我正确的方向,我将不胜感激。谢谢你。
public static void main(String[] args) {
// Scanner and LinkedList
Scanner keyboard = new Scanner(System.in);
LinkedList<Student> studentList = new LinkedList<Student>();
ArrayList<Student> stdList = new ArrayList<Student>();
int choice;
boolean flag = true;
do {
Student.showMenu();
choice = keyboard.nextInt();
switch (choice) {
case 1: {
System.out.println("What is the students last name?");
String last = keyboard.next();
System.out.println("What is the students first name?");
String first = keyboard.next();
System.out.println("What is the students course code?");
int courseCode = keyboard.nextInt();
System.out.println("What is the students course grade?");
String grade = keyboard.next();
Student st = new Student(last, first, courseCode, grade);
studentList.add(st);
stdList.add(st);
break;
}
case 2: {
System.out
.println("Please enter the students last name you wish to delete.");
String last = keyboard.next();
int index = Student.indexOf(studentList, last);
if (index != -1)
studentList.remove(index);
else
System.out.println("Student does not exist.");
break;
}
case 3: {
System.out
.println("Please enter the students last name you wish to search.");
String last = keyboard.next();
int index = Student.indexOf(studentList, last);
if (index != -1)
studentList.get(index).toString();
else
System.out.println("Student does not exist.");
break;
}
case 4: {
System.out.println("");
break;
}
case 5:
System.out.println("");
break;
case 6:
Student.displayList(studentList);
break;
case 7:
flag = false;
break;
}
} while (flag);
}
public class Student {
private static String last;
private static String first;
private static int courseCode;
private static String grade;
public Student(String last, String first, int courseCode, String grade) {
this.last = last;
this.first = first;
this.courseCode = courseCode;
this.grade = grade;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public int getCourseCode() {
return courseCode;
}
public void setCourseCode(int courseCode) {
this.courseCode = courseCode;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public static void showMenu() {
System.out.println("Welcome to the database menu!\n");
System.out.println("Press 1 to insert a new record");
System.out.println("Press 2 to delete a record");
System.out.println("Press 3 to search the database (by last name)");
System.out.println("Press 4 to print a range in the database");
System.out.println("Press 5 to find the class average for a course");
System.out.println("Press 6 to print the list");
System.out.println("Press 7 to quit");
}
public String toString() {
String str = " Last name: " + last + " First name: " + first
+ " Course code: " + courseCode + " Course grade: " + grade;
return str;
}
static int indexOf(LinkedList<Student> list, String last) {
int i = 0;
for (Student std : list) {
if (std.getLast().equals(last))
return i;
i++;
}
return -1;
}
static void displayList(LinkedList<Student> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).toString() + " ");
}
}
static void displayList(ArrayList<Student> stdList) {
for (int i = 0; i < stdList.size(); i++) {
System.out.println(stdList.get(i).toString() + " ");
}
}
}
这是一个比较特殊的问题。我最好的建议是改变
Student st = new Student(last, first, courseCode, grade);
studentList.add(st);
stdList.add(st);
至
studentList.add(new Student(last, first, courseCode, grade));
stdList.add(new Student(last, first, courseCode, grade));
问题出在您的列表代码而不是添加方法,请检查您的迭代代码,如果您使用常规 for
进行迭代,即
for(int i=0;i
那么您一定犯了典型的初学者错误,即每次迭代都获取第一项,而不是使用分配的变量,例如
List.get(0)
rather than List.get(i)
我建议您使用 增强版 a.k.a foreach
此类情况
问题是您将 class Student
的私有成员定义为 static
。任何理由将它们标记为 static
。请删除静态,您的代码应该可以正常工作。
我添加新学生对象的每次迭代都会覆盖以前的对象并在整个列表中包含相同的对象。我尝试使用链接列表和数组列表,但仍然遇到同样的问题。如果有人愿意指导我正确的方向,我将不胜感激。谢谢你。
public static void main(String[] args) {
// Scanner and LinkedList
Scanner keyboard = new Scanner(System.in);
LinkedList<Student> studentList = new LinkedList<Student>();
ArrayList<Student> stdList = new ArrayList<Student>();
int choice;
boolean flag = true;
do {
Student.showMenu();
choice = keyboard.nextInt();
switch (choice) {
case 1: {
System.out.println("What is the students last name?");
String last = keyboard.next();
System.out.println("What is the students first name?");
String first = keyboard.next();
System.out.println("What is the students course code?");
int courseCode = keyboard.nextInt();
System.out.println("What is the students course grade?");
String grade = keyboard.next();
Student st = new Student(last, first, courseCode, grade);
studentList.add(st);
stdList.add(st);
break;
}
case 2: {
System.out
.println("Please enter the students last name you wish to delete.");
String last = keyboard.next();
int index = Student.indexOf(studentList, last);
if (index != -1)
studentList.remove(index);
else
System.out.println("Student does not exist.");
break;
}
case 3: {
System.out
.println("Please enter the students last name you wish to search.");
String last = keyboard.next();
int index = Student.indexOf(studentList, last);
if (index != -1)
studentList.get(index).toString();
else
System.out.println("Student does not exist.");
break;
}
case 4: {
System.out.println("");
break;
}
case 5:
System.out.println("");
break;
case 6:
Student.displayList(studentList);
break;
case 7:
flag = false;
break;
}
} while (flag);
}
public class Student {
private static String last;
private static String first;
private static int courseCode;
private static String grade;
public Student(String last, String first, int courseCode, String grade) {
this.last = last;
this.first = first;
this.courseCode = courseCode;
this.grade = grade;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public int getCourseCode() {
return courseCode;
}
public void setCourseCode(int courseCode) {
this.courseCode = courseCode;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public static void showMenu() {
System.out.println("Welcome to the database menu!\n");
System.out.println("Press 1 to insert a new record");
System.out.println("Press 2 to delete a record");
System.out.println("Press 3 to search the database (by last name)");
System.out.println("Press 4 to print a range in the database");
System.out.println("Press 5 to find the class average for a course");
System.out.println("Press 6 to print the list");
System.out.println("Press 7 to quit");
}
public String toString() {
String str = " Last name: " + last + " First name: " + first
+ " Course code: " + courseCode + " Course grade: " + grade;
return str;
}
static int indexOf(LinkedList<Student> list, String last) {
int i = 0;
for (Student std : list) {
if (std.getLast().equals(last))
return i;
i++;
}
return -1;
}
static void displayList(LinkedList<Student> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).toString() + " ");
}
}
static void displayList(ArrayList<Student> stdList) {
for (int i = 0; i < stdList.size(); i++) {
System.out.println(stdList.get(i).toString() + " ");
}
}
}
这是一个比较特殊的问题。我最好的建议是改变
Student st = new Student(last, first, courseCode, grade);
studentList.add(st);
stdList.add(st);
至
studentList.add(new Student(last, first, courseCode, grade));
stdList.add(new Student(last, first, courseCode, grade));
问题出在您的列表代码而不是添加方法,请检查您的迭代代码,如果您使用常规 for
进行迭代,即
for(int i=0;i
那么您一定犯了典型的初学者错误,即每次迭代都获取第一项,而不是使用分配的变量,例如
List.get(0)
rather thanList.get(i)
我建议您使用 增强版 a.k.a foreach
此类情况
问题是您将 class Student
的私有成员定义为 static
。任何理由将它们标记为 static
。请删除静态,您的代码应该可以正常工作。