首页 > 解决方案 > 如何在附加的 StudentTest.java 文件中交换对象 s1 和 s3

问题描述

下面是一个 StudentTest 类,它使用 Student.java 创建学生

学生班

class Student
 {
    int id;
    static int computeCount;

    int age;
    String name;
    String gender;
    short rank;
    double gpa;
    long phone;
    char degree;

    boolean international;
    double tutionfees=12000;
    double internationalFees=5000;

    Student(int id,String name,String gender,int age,long phone,double gpa, char degree){
      // id=newId;
      // name=newName;
      // gender=newGender;
      // age=newAge;
      // phone=newPhone;
      // gpa=newGpa;
      // degree=newDegree;
      this(id,name,gender, age, phone,gpa,degree,false);    // delegate to second parameterized constructor 
      //international=isInternational;
    }


    // Second parameterized constructor
    Student(int id,String name,String gender,int age,long phone,double gpa, char degree,boolean international){
      this.id=id;
      this.name=name;
      this.gender=gender;
      this.age=age;
      this.phone=phone;
      this.gpa=gpa;
      this.degree=degree;
      this.international=international;
}

学生测试班

class StudentTest {
     public static void main(String args[])
     {
        Student s1=new Student(1000,"John","Male",18,2234567890L,3.8,'B');
        Student s2=new Student(1001,"Indresh","Male",20,2234567893L,4.0,'C',true);
        Student s3 = new Student(1002,"Anita","Female",25,2234568793L,4.2,'B',true);
        System.out.println("student1: " + s1.name);
        System.out.println("student2: " + s2.name);
        System.out.println("student3: " + s3.name);

        Student[] students={s1,s2,s3};    // object array of Student type

        // Swap s1 and s3 references

        // Before Swap
        System.out.println("\n\nBefore Swap\n--------");
        System.out.println("student1: " + s1.name);
        System.out.println("student2: " + s2.name);
        System.out.println("student3: " + s3.name);

         // After swap

        swap_s1_n_s3(students,0,2);

        System.out.println("\n\nAfter Swap, Inside StudentTest class\n--------");

        System.out.println("\n\nstudent1: " + s1.name);
        System.out.println("student2: " + s2.name);
        System.out.println("student3: " + s3.name);

   }


static void swap_s1_n_s3(Student[] students,int first,int last)
   {    System.out.println("\n\n------------\nINSIDE SWAP METHOD");
        Student s5;
        s5=students[first];
        students[first]=students[last];
        students[last]=s5;
        
          System.out.println("\n\nstudent1: " + students[0].name);
        System.out.println("student2: " + students[1].name);
        System.out.println("student3: " + students[2].name);
        System.out.println("\nEXIT SWAP METHOD");

   }
 }  

输出

$ java学生测试

学生 1:琼 学生 2:Indresh 学生 3:安妮塔

交换前

学生 1:约翰 学生 2:Indresh 学生 3:安妮塔


内部交换方法

学生 1:安妮塔 学生 2:Indresh 学生 3:约翰

退出交换方法

交换后,在 StudentTest 类中

学生 1:约翰 学生 2:Indresh 学生 3:安妮塔

我的问题是交换函数也应该交换 main() 中的引用,但事实并非如此,为什么?

标签: java

解决方案


交换逻辑正常工作。这个问题的性质不同。

s1在呈现的代码中,变量s2s3用于保存初始Student对象,初始化 -arraystudents并打印为调试。然而,不管对 和 with 做了什么students,这三个变量都引用了Student最初分配给它们的相同对象。当变量声明为final.

打印Students 进行调试时,应通过students-array 访问它们:

System.out.println("student1: " + students[0].name);
System.out.println("student2: " + students[1].name);
System.out.println("student3: " + students[2].name);

Ideone demo


推荐阅读