首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的arraylist的Java Set方法不起作用?

为什么我的arraylist的Java Set方法不起作用?
EN

Stack Overflow用户
提问于 2021-02-16 08:35:58
回答 2查看 94关注 0票数 2
代码语言:javascript
运行
复制
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;
   }
}
代码语言:javascript
运行
复制
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“。我到处寻找堆栈溢出,但我没有找到一个解决方案。

以下是运行代码后的调试器:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-16 08:44:12

调试器的输出有些异样--它说列表中有两次相同的学生对象(id=48) (正如您所期望的),但内容却不同。也许调试器还没有完全刷新它的显示?

如果循环遍历列表的内容并打印出学生的名字,会发生什么?

票数 3
EN

Stack Overflow用户

发布于 2021-02-16 08:59:22

我创建了您的代码的一个更简单的版本,省略了分散注意力的部分。

我构建了一个包含两个Student对象的ArrayList,一个用于"Bob“,另一个用于"Alice”。我将"Bob“对象替换为"Alice”。我的列表只剩下对同一个"Alice“对象的两个引用。

这对我很有效。Answer by araqnid似乎是正确的:您的调试器要么有buggy,要么需要刷新。

代码语言:javascript
运行
复制
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 );
    }
}

运行时。

代码语言:javascript
运行
复制
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 }]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66217275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档