我很难为我的程序创建compareTo()方法。我的程序从命令行中读取5对String / Integers。它们将代表Person对象的名称和年龄。
例如我的命令行参数是:Asia 19 Java 20 Html 25 CSS 18 Ruby 10
我的目标是在从最小到最大数字重新排列的对话框中显示它们。
*我需要帮助的问题是我的compareTo()方法。我有点卡在这一点上,因为我不认为我理解使用这种方法的概念。如果有人能给我一个信息丰富的解释,那就太棒了! 我的代码:
// To display dialog box(s)
import javax.swing.JOptionPane;
//An interface used to compare two objects.
import java.lang.Comparable;
public class searchSort{
public static void main(String[] args){
if (args.length != 10){
System.out.println("Please enter 5 String/Intger pairs " +
"on the commandline");
}
else{
int age1 = new Integer(0);
int age2 = new Integer(0);
int age3 = new Integer(0);
int age4 = new Integer(0);
int age5 = new Integer(0);
try{
age1 = Integer.parseInt(args[1]);
age2 = Integer.parseInt(args[3]);
age3 = Integer.parseInt(args[5]);
age4 = Integer.parseInt(args[7]);
age5 = Integer.parseInt(args[9]);
}
catch (NumberFormatException exception) {
System.out.println("Error: Commandline arguments 2,4,6,8,10 must be a positive integer.");
System.exit(0); // end program
}
Person[] arr = new Person[5];
arr[0] = new Person(args[0], age1);
arr[1] = new Person(args[2], age2);
arr[2] = new Person(args[4], age3);
arr[3] = new Person(args[6], age4);
arr[4] = new Person(args[8], age5);
JOptionPane.showMessageDialog(null, arr[0]+ "\n" +arr[1]+ "\n"+arr[2]+ "\n"+
arr[3] + "\n" + arr[4]);
//
}
}
}
class Person implements Comparable{
// Data Fields
protected String name;
protected int age;
// Constructor
public Person(String n1, int a1){
name = n1;
age = a1;
}
//toString() method
public String toString(){
String output = name + " is " + age + " years old.";
return output;
}
//getAge() method
public int getAge(){
return age;
}
// compareTo() method
public int compareTo(Object object) throws ClassCastException{
int person1 = this.getAge();
int person2 = object.getAge();
int result = this.getAge() - object.getAge();
return result;
}
}
答案 0 :(得分:4)
您的代码将无法编译,因为您正在使用Object作为Person。你需要施展它:
public int compareTo(Object object) throws ClassCastException{
return age - ((Person)object).age;
}
您只需要一行,并且可以直接访问字段。
答案 1 :(得分:0)
Comparable
启用的内容是,当Person
对象位于List
或Array
等容器对象中时,可以对其进行排序。
我建议查看Arrays
和Collections
类,了解如何执行此操作。
答案 2 :(得分:0)
compareTo(Object obj)
方法的合同要求您返回:
this
被视为小于obj
this
等于obj
,则this
大于obj
这样您就可以为您的班级定义排序行为。
Arrays.sort(people);
请注意,您只需反转返回值的符号即可向后排序对象。
作为旁注,一些排序方法允许您传递Comparator
以及要排序的集合,这使您可以定义除默认排序标准之外的其他排序标准。
Arrays.sort(people, new Comparator<Person>() { ... });