public class Student implements Comparable<Student>
{
private String name;
private double gradePoints = 0;
private int units = 0;
private int index=-1;
public Student(String name)
{
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int i) {
index=i;
}
public Student(String name, double gpa, int units)
{
this.name = name;
this.units = units;
this.gradePoints = gpa * units;
}
public String getName()
{
return name;
}
public double gpa()
{
if(units > 0)
return gradePoints/units;
return 0;
}
public void addGrade(double gradePointsPerUnit, int units)
{
this.units += units;
this.gradePoints += gradePointsPerUnit * units;
}
public int compareTo(Student other) //Do not change this method. Ask me why if you like.
{
double difference = gpa() - other.gpa();
if(difference == 0) return 0;
if(difference > 0) return 14; //Do not hardcode 14, or -12, into your code.
return -12;
}
}
import java.util.ArrayList;
public class heapgang {
public static void main(String[] args) {
ArrayList<Student> x= new ArrayList<Student>();
Student a= new Student("bob",1,2);
Student b= new Student("arav",3,4);
x.add(a);
x.add(b);
x.set(0, b); // should change the first element in the arraylist to student named "arav"
}
}
在我的代码末尾,第一个元素没有更改为arav。为什么会这样呢?我认为在set方法之后,arraylist中的两个元素都应该命名为"arav“。我到处寻找堆栈溢出,但我没有找到一个解决方案。
以下是运行代码后的调试器:
发布于 2021-02-16 08:44:12
调试器的输出有些异样--它说列表中有两次相同的学生对象(id=48) (正如您所期望的),但内容却不同。也许调试器还没有完全刷新它的显示?
如果循环遍历列表的内容并打印出学生的名字,会发生什么?
发布于 2021-02-16 08:59:22
我创建了您的代码的一个更简单的版本,省略了分散注意力的部分。
我构建了一个包含两个Student
对象的ArrayList
,一个用于"Bob“,另一个用于"Alice”。我将"Bob“对象替换为"Alice”。我的列表只剩下对同一个"Alice“对象的两个引用。
这对我很有效。Answer by araqnid似乎是正确的:您的调试器要么有buggy,要么需要刷新。
package work.basil.example.listing;
import java.util.ArrayList;
import java.util.List;
public class Student
{
// member fields
private String name;
private double gradePoints = 0;
private int units = 0;
// Constructors
public Student ( String name )
{
this.name = name;
}
public Student ( String name , double gpa , int units )
{
this.name = name;
this.units = units;
this.gradePoints = gpa * units;
}
// Object overrides
@Override
public String toString ( )
{
return "Student{ " +
"name='" + name + '\'' +
" | gradePoints=" + gradePoints +
" | units=" + units +
" }";
}
// `main` to run app
public static void main ( String[] args )
{
List < Student > students = new ArrayList < Student >();
Student bob = new Student( "Bob" , 1 , 2 );
Student alice = new Student( "Alice" , 3 , 4 );
students.add( bob );
students.add( alice );
System.out.println( "students = " + students );
students.set( 0 , alice );
System.out.println( "students = " + students );
}
}
运行时。
students = [Student{ name='Bob' | gradePoints=2.0 | units=2 }, Student{ name='Alice' | gradePoints=12.0 | units=4 }]
students = [Student{ name='Alice' | gradePoints=12.0 | units=4 }, Student{ name='Alice' | gradePoints=12.0 | units=4 }]
https://stackoverflow.com/questions/66217275
复制相似问题