Java 链表及;快速分类

Java 链表及;快速分类,java,list,Java,List,我正在尝试另一种方法来排序链表。除了可用的方法之外,我决定从链表中获取每个节点并将其放置在一个数组中,这样我就能够轻松地比较数据变量。我在数组上应用了快速排序,这就是我得到的…但是,当结果显示时,我得到的是节点的内存地址,而不是学生信息 这就是出现的内容:(作为输出) 已排序的列表是: homework2.Node@44b471fe homework2.Node@22a7fdef homework2.Node@431067af homework2.Node@6a07348e null 这是我的

我正在尝试另一种方法来排序链表。除了可用的方法之外,我决定从链表中获取每个节点并将其放置在一个数组中,这样我就能够轻松地比较数据变量。我在数组上应用了快速排序,这就是我得到的…但是,当结果显示时,我得到的是节点的内存地址,而不是学生信息

这就是出现的内容:(作为输出)

已排序的列表是:

homework2.Node@44b471fe
homework2.Node@22a7fdef
homework2.Node@431067af
homework2.Node@6a07348e
null
这是我的密码

public static void main(String[] args) {

MyLinkedList list = new MyLinkedList();

Student s = new Student(1, "John", 20, "Italy", "2011");
list.addStudent(s);
Student s2 = new Student(2, "Mark", 19, "UAE", "2010");
list.addStudent(s2);
Student s3 = new Student(3, "Sally", 35, "UAE", "2000");
list.addStudent(s3);

 System.out.println("Students in the list: ");
list.print();

 Node[] n = list.convertA(list);
  quickSort(n, 0, (n.length-1));
  System.out.println("Sorted list is:");

  for(int q =0;q<n.length;q++){
      System.out.println(n[q] + " ");
  }
}

public static int partition(Node arr[], int left, int right) {

int i = left, j = right;

Node tmp;

Node pivot = arr[(left + right) / 2];

while (i <= j) {

    while (arr[i].getStudent().getAge() < pivot.getStudent().getAge()) {
        i++;
    }

    while (arr[j].getStudent().getAge() > pivot.getStudent().getAge()) {
        j--;
    }

    if (i <= j) {

        tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
        i++;
        j--;

    }

}
return i;

}

public static void quickSort(Node arr[], int left, int right) {

int index = partition(arr, left, right-1);

if (left < index - 1) {
    quickSort(arr, left, index - 1);
}

if (index < right) {
    quickSort(arr, index, right);
}
}
.但是,当显示结果时,我会得到内存地址 而不是学生信息

因为您没有覆盖
节点
类中的
toString
方法,所以您可以打印
对象
类中定义的此方法的默认行为:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
@Override
public String toString (){
  return this.id+"-"+this.name+"-"+this.age+"-"+this.country+"-"+this.year;
}
首先,您必须重写
Student
类中的
toString
方法:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
@Override
public String toString (){
  return this.id+"-"+this.name+"-"+this.age+"-"+this.country+"-"+this.year;
}
然后可以在节点类中重写toString方法:

 @Override
 public String toString (){
   return this.student.toString();
 }
然后让你的for像这样循环

或者只重写学生类中的
toString
方法:

并修改for循环,如下所示:

for(int q =0;q<n.length;q++){
      System.out.println(n[q].getStudent() + " ");
}
for(int q=0;q
.但是,当显示结果时,我会得到内存地址
而不是学生信息

因为您没有覆盖
节点
类中的
toString
方法,所以您可以打印
对象
类中定义的此方法的默认行为:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
@Override
public String toString (){
  return this.id+"-"+this.name+"-"+this.age+"-"+this.country+"-"+this.year;
}
首先,您必须重写
Student
类中的
toString
方法:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
@Override
public String toString (){
  return this.id+"-"+this.name+"-"+this.age+"-"+this.country+"-"+this.year;
}
然后可以在节点类中重写toString方法:

 @Override
 public String toString (){
   return this.student.toString();
 }
然后让你的for像这样循环

或者只重写学生类中的
toString
方法:

并修改for循环,如下所示:

for(int q =0;q<n.length;q++){
      System.out.println(n[q].getStudent() + " ");
}
for(int q=0;q
.但是,当显示结果时,我会得到内存地址
而不是学生信息

因为您没有覆盖
节点
类中的
toString
方法,所以您可以打印
对象
类中定义的此方法的默认行为:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
@Override
public String toString (){
  return this.id+"-"+this.name+"-"+this.age+"-"+this.country+"-"+this.year;
}
首先,您必须重写
Student
类中的
toString
方法:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
@Override
public String toString (){
  return this.id+"-"+this.name+"-"+this.age+"-"+this.country+"-"+this.year;
}
然后可以在节点类中重写toString方法:

 @Override
 public String toString (){
   return this.student.toString();
 }
然后让你的for像这样循环

或者只重写学生类中的
toString
方法:

并修改for循环,如下所示:

for(int q =0;q<n.length;q++){
      System.out.println(n[q].getStudent() + " ");
}
for(int q=0;q
.但是,当显示结果时,我会得到内存地址
而不是学生信息

因为您没有覆盖
节点
类中的
toString
方法,所以您可以打印
对象
类中定义的此方法的默认行为:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
@Override
public String toString (){
  return this.id+"-"+this.name+"-"+this.age+"-"+this.country+"-"+this.year;
}
首先,您必须重写
Student
类中的
toString
方法:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
@Override
public String toString (){
  return this.id+"-"+this.name+"-"+this.age+"-"+this.country+"-"+this.year;
}
然后可以在节点类中重写toString方法:

 @Override
 public String toString (){
   return this.student.toString();
 }
然后让你的for像这样循环

或者只重写学生类中的
toString
方法:

并修改for循环,如下所示:

for(int q =0;q<n.length;q++){
      System.out.println(n[q].getStudent() + " ");
}

for(int q=0;q我已经解决了这个问题并对数组进行了排序

我的索引快速排序方法中存在问题 应该是:

int index = partition(arr,left,right)
而不是:

int index = partition(arr, left, right-1);
正如ZouZou早些时候指出的,for循环有故障,所以我也修复了它


非常感谢您的帮助!

我已经解决了问题并对阵列进行了排序

我的索引快速排序方法中存在问题 应该是:

int index = partition(arr,left,right)
而不是:

int index = partition(arr, left, right-1);
正如ZouZou早些时候指出的,for循环有故障,所以我也修复了它


非常感谢您的帮助!

我已经解决了问题并对阵列进行了排序

我的索引快速排序方法中存在问题 应该是:

int index = partition(arr,left,right)
而不是:

int index = partition(arr, left, right-1);
正如ZouZou早些时候指出的,for循环有故障,所以我也修复了它


非常感谢您的帮助!

我已经解决了问题并对阵列进行了排序

我的索引快速排序方法中存在问题 应该是:

int index = partition(arr,left,right)
而不是:

int index = partition(arr, left, right-1);
正如ZouZou早些时候指出的,for循环有故障,所以我也修复了它



非常感谢您的帮助!

现在它给了我一个例外:“不能将字符串铸造到node@PeterLawrey这意味着我应该将数组的类型更改为字符串,但我需要新类型来包含学生的数据成员,以便对age@ZouZoutostring方法已在我的学生中被重写class@P.성미 你能给我看看你的节点类吗?每个节点都有一个学生吗?@ZouZou是的,我忘记了节点类中的toString,谢谢提醒!现在它给了我一个例外“绳子不能铸在一个圆上node@PeterLawrey这意味着我应该将数组的类型更改为字符串,但我需要新类型来包含学生的数据成员,以便对age@ZouZoutostring方法已在我的学生中被重写class@P.성미 你能给我看看你的节点类吗?每个节点都有一个学生吗?@ZouZou是的,我忘记了节点类中的toString,谢谢提醒!现在它给了我一个例外“绳子不能铸在一个圆上node@PeterLawrey这意味着我应该将数组的类型更改为字符串,但我需要新类型来包含学生的数据成员,以便对age@ZouZoutostring方法已在我的学生中被重写class@P.성미 你能给我看看你的节点类吗?每个节点都有一个学生吗?@ZouZou是的,我忘记了节点类中的toString,谢谢提醒!现在它给了我一个例外“绳子不能铸在一个圆上node@PeterLawrey这意味着我应该将数组的类型更改为字符串,但我需要新类型来包含学生的数据成员,以便对age@ZouZoutostring方法已在中重写