Java 如何分配包含许多详细信息的ArrayList
我试着做一个学生注册项目。所以我也写了一个类文件。使用该类文件,我将值放入ArrayList。但问题是,如果我输入3个学生的详细信息,最后它只打印最后一个学生的详细信息两次。我是个乞丐,请帮我克服这个问题 这是我写的主要方法Java 如何分配包含许多详细信息的ArrayList,java,class,generics,arraylist,Java,Class,Generics,Arraylist,我试着做一个学生注册项目。所以我也写了一个类文件。使用该类文件,我将值放入ArrayList。但问题是,如果我输入3个学生的详细信息,最后它只打印最后一个学生的详细信息两次。我是个乞丐,请帮我克服这个问题 这是我写的主要方法 Student obj = new Student(); Scanner in = new Scanner(System.in); ArrayList<Student> List = new ArrayList<Student&
Student obj = new Student();
Scanner in = new Scanner(System.in);
ArrayList<Student> List = new ArrayList<Student>();
for (;;) {
System.out.print("Enter the Student ID: ");
obj.setStudentID(in.next());
System.out.print("Enter the first name: ");
obj.setFirstName(in.next());
System.out.print("Enter the last name: ");
obj.setLastName(in.next());
System.out.print("Enter the Course Work 1 marks: ");
obj.setCwk01(in.nextInt());
System.out.print("Enter the Course Work 2 marks: ");
obj.setCwk02(in.nextInt());
System.out.print("Enter the final exam marks: ");
obj.setExam(in.nextInt());
List.add(obj);
System.out.print("Enter q to stop (or any other to continue): ");
String str = in.next();
if (str.equals("q") || str.equals("Q")) {
System.out.println("\n");
break;
}
System.out.println("\n");
}
for (Student value : List) {
System.out.println(value.getCwk01());
}
动议本声明:
Student obj = new Student();
在for
循环中。当前,您正在对同一对象进行变异,并将其引用添加到列表中。最后,所有引用都将指向同一对象,因此在打印它们时将打印出相同的细节
除此之外,我在您的代码中还看到了一些问题:
请将变量名List
更改为List
,或者更好的studentList
以下if
条件:
if (str.equals("q") || str.equals("Q"))
可替换为:
if (str.equalsIgnoreCase("q"))
此外,每当您使用Scanner\nextInt()
或Scanner\next()
或任何其他方法读取某个值时,请确保有可读取的输入,否则它可能在运行时引发异常。您可以分别使用Scanner\hasNextInt()
或Scanner\hasNext()
最后,这一行代码中有一个小错误:
String str = in.next();
请注意,您正在.nextInt()中的之后调用.next()中的
。这将导致您出现问题,如中所述。遵循那篇文章中的解决方法,你会没事的
哦,是的,System.out.println(“\n”)
可以替换为System.out.println()
,除非您确实想打印2行换行符。每次for循环运行时,您需要创建一个新的Student
对象
for (;;) {
final Student obj = new Student();
// ...
}
您可以从Student
类中删除set
方法,并且只允许在Student
构造函数中设置字段,以避免出现此错误。非常感谢!!我是初学者,这些东西对我很有帮助!!!:最后,我想按他们的姓氏对名单进行排序。请告诉我怎么做。@user3438308你能单独问一个问题吗。事实上,寻找这样的问题,它已经被回答了很多次。
for (;;) {
final Student obj = new Student();
// ...
}