如何在attched StudentTest.java文件中交换对象s1和s3



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

学生班级

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;
}

StudentTest类

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("nnBefore Swapn--------");
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("nnAfter Swap, Inside StudentTest classn--------");
System.out.println("nnstudent1: " + 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("nn------------nINSIDE SWAP METHOD");
Student s5;
s5=students[first];
students[first]=students[last];
students[last]=s5;

System.out.println("nnstudent1: " + students[0].name);
System.out.println("student2: " + students[1].name);
System.out.println("student3: " + students[2].name);
System.out.println("nEXIT SWAP METHOD");
}
}  

输出

$java StudentTest

学生1:琼学生2:Indresh学生3:Anita

交换前

学生1:约翰学生2:Indresh学生3:Anita


内部交换方法

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

退出交换方法

交换后,StudentTest类内部

学生1:约翰学生2:Indresh学生3:Anita

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

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

在所提供的代码中,变量s1s2s3用于保存初始Student-对象,初始化students-数组并打印为调试。然而,无论对students做了什么,这三个变量都引用了最初分配给它们的同一个Student对象。当变量被声明为final时,这一点就显而易见了。

当打印用于调试的Student时,应通过students-数组访问它们:

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

Ideone演示

如下替换main方法,您会有一个想法。

您不需要通过引用来访问元素,而需要通过array[index]来访问,您将获得所需的确切结果。

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("nnBefore Swapn--------");
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("nnAfter Swap, Inside StudentTest classn--------");
System.out.println("student1: " + students[0].name);
System.out.println("student2: " +  students[1].name);
System.out.println("student3: " +  students[2].name);
}

最新更新