【发布时间】:2016-01-21 04:31:04
【问题描述】:
编写一个代码,它在超类中有一个名为 compareTo() 的方法,并且必须在测试器类中实现。
我的问题是我无法让 compareTo() 方法在 Animal 类中工作。非常感谢任何帮助!
到目前为止的代码:
import java.util.Comparator;
abstract class Animal implements Comparable<Animal> {
private String firstName;
private String lastName;
private int size;
// Default Constructor
public Animal(String firstName, String lastName, int size){
super();
firstName = "";
lastName = "";
size = 0;
}
// Setters and Getters
public void setFirstName(String firstName){
firstName = firstName;
}
public String getFirstName(){
return firstName;
}
public void setLastName(String lastName){
lastName = lastName;
}
public String getLastName(){
return lastName;
}
public void setSize(int size){
size = size;
}
public int getSize(){
return size;
}
// CompareTo method
public int compareTo(Animal compareAnimal) {
String compareFirstName = ((Animal) compareAnimal).getFirstName();
return firstName;
}
// Abstract method to be implemented in subclasses
abstract String sound();
// To be overriden in subclasses
@Override
public String toString(){
return getFirstName() + getLastName() + getSize() + " says " + sound();
}
}
public class Dog extends Animal {
// Calls the constructor in the superlcass
public Dog(String firstName, String lastName, int size){
super(firstName, lastName, size);
}
// Implements the abstract methods in Animal class
public String sound(){
return "woof";
}
}
public class Cat extends Animal {
// Calls the constructor in the superlcass
public Cat(String firstName, String lastName, int size){
super(firstName, lastName, size);
}
// Implements the abstract methods in Animal class
public String sound(){
return "meow";
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.LinkedList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
public class Tester {
public static void main(String[] args) {
Dog dog1 = new Dog();
Cat cat1 = new Cat();
dog1.setFirstName("Patch");
dog1.setLastName("Cabbage");
dog1.setSize(5);
System.out.println(dog1.toString());
System.out.println();
cat1.setFirstName("Felix");
cat1.setLastName("Longbottom");
cat1.setSize(3);
System.out.println(cat1.toString());
System.out.println();
// Create new ArrayList
LinkedList<Animal> animalList = new LinkedList<>();
// Add animals to the animalList
animalList.add(dog1);
animalList.add(cat1);
// Sort by first name
List <String> firstName = new LinkedList<String>( );
try{
File file = new File("Animals.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while ((line = reader.readLine()) != null){
firstName.add(line);
}
} catch(Exception e){
e.printStackTrace();
}
Iterator<String> itr = firstName.iterator( );
while ( itr.hasNext( ) ) {
String person = itr.next( );
System.out.println(person);
}
Collections.sort(firstName);
class InnerClass implements Comparator {
// body
}
}
}
【问题讨论】:
-
您预计会发生什么,正在发生什么?你试过什么?
-
我想使用 compareTo 方法在测试器类中按 firstName 进行排序,但我目前正在尝试的方法不允许发生这种结果。 @史蒂夫克兰顿
-
@SteveClanton 在 Animal 类中,我想使用 compareTo 方法比较 firstName,然后在测试器中使用 Collections.sort() 按 firstName 对列表进行排序,然后覆盖 compareTo 方法进行排序其他变量。
-
查看您的
compareTo方法...您在比较什么?提示:您想在方法中将compareAnimal与this进行比较。您不想返回名字。您需要将compareAnimal的名字与this的名字进行比较。当您将这两个字符串相互比较时,您希望返回比较的结果。 -
@SteveClanton 是这样的吗?: public int compareTo(Animal compareAnimal) { int result = this.firstName.compareTo( compareAnimal ); System.out.println(结果); }
标签: java list variables methods compare