我创建了一个动物数组,其中包含“脊椎动物”类型的对象,该对象由扩展“脊椎动物”的许多类制成。

本质上,有许多动物类(例如“狗”,“人”等)扩展了“哺乳动物”类,而动物类又扩展了“脊椎动物”类

我需要通过为每个动物指定的名称在此数组上使用选择排序。

我一直在尝试使用Comparable并修改compareTo(),然后使用Arrays.sort(Vertebrates [] list)

我不断收到以下异常
java.util.Arrays.mergeSort(Arrays.java:1144)
在java.util.Arrays.sort(Arrays.java:1079)
在project3.AnimalDatabase.main(AnimalDatabase.java:188)

我不确定我是否正确实现了Comparable或toCompare()部分。我一直在寻找其他问答,但没有找到明确的答案

//Driver class for program

public class AnimalDatabase   {


public static void sort(Vertebrates[] list)
{

}

main{
//this creates a list called "animalList" of type Vertebrates
//the method in which the array is initialized and populated has been omitted here to save space.
//the list will contain a number of different animal types "Dog" "Human", etc.
     Vertebrates[] animalList = new Vertebrates[10];
}

    Arrays.sort(animalList);

for(int i=0; i<animalList.length; i++)
{
System.out.println("sorted list is " + animalList[i]);

}

//Verebrates class
//some getters and setters have been omitted, as well as a toString() method
public abstract class Vertebrates implements Comparable<Vertebrates>
{
static int count=0;

int id;
int brainSize;
int lengthOfVertebralColumn;

Vertebrates(int brainSize, int lengthOfVertebralColumn)
{
    id=count;
    this.brainSize=brainSize;
    this.lengthOfVertebralColumn=lengthOfVertebralColumn;
    count++;

}
public String compareTo(Vertebrates other)
{
    String otherFirst = ((Mammals)other).getName();

    return otherFirst;

}

}


//Mammals class
//some getters and setters have been omitted, as well as a toString() method

public class Mammals extends Vertebrates implements Comparable<Vertebrates>
int NumberOfTeeth;
int NumberOfFeet;
String Name;

Mammals(int brainSize, int lengthOfVertebralColumn, int NumberOfTeeth,int NumberOfFeet, String Name)
{
    super(brainSize, lengthOfVertebralColumn);
    this.NumberOfTeeth=NumberOfTeeth;
    this.NumberOfFeet=NumberOfFeet;
    this.Name=Name;
}

public String getName() {
    return Name;
}

//example of one of the animal classes
//some getters and setters have been omitted, as well as a toString() method

public class Dog extends Mammals implements Comparable<Vertebrates>  {

Dog(int brainSize, int lengthOfVertebralColumn, int NumberOfTeeth, int NumberOfFeet,        String Name, boolean domestic, CoatTypes TypeOfCoat)
{
    super(brainSize, lengthOfVertebralColumn, NumberOfTeeth, NumberOfFeet,   Name);

    this.domestic=domestic;
    this.TypeOfCoat=TypeOfCoat;

}

最佳答案

如果要在超类Vertebrates中定义比较逻辑,则只能使用为所有子类定义的超类属性,否则将如何比较数组中不同子类的对象。


超类不知道其子类,因此不要在超类方法中使用任何子类。

您如何比较MammalsAnimals

09-10 09:08
查看更多