我创建了一个动物数组,其中包含“脊椎动物”类型的对象,该对象由扩展“脊椎动物”的许多类制成。
本质上,有许多动物类(例如“狗”,“人”等)扩展了“哺乳动物”类,而动物类又扩展了“脊椎动物”类
我需要通过为每个动物指定的名称在此数组上使用选择排序。
我一直在尝试使用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
中定义比较逻辑,则只能使用为所有子类定义的超类属性,否则将如何比较数组中不同子类的对象。
超类不知道其子类,因此不要在超类方法中使用任何子类。
您如何比较Mammals
和Animals
?