compareTo排序整数的方法

时间:2014-02-20 09:24:27

标签: java arrays sorting command-line-arguments compareto

我很难为我的程序创建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;
   }

}

3 个答案:

答案 0 :(得分:4)

您的代码将无法编译,因为您正在使用Object作为Person。你需要施展它:

public int compareTo(Object object) throws ClassCastException{
    return age - ((Person)object).age;
}

您只需要一行,并且可以直接访问字段。

答案 1 :(得分:0)

Comparable启用的内容是,当Person对象位于ListArray等容器对象中时,可以对其进行排序。

我建议查看ArraysCollections类,了解如何执行此操作。

答案 2 :(得分:0)

compareTo(Object obj)方法的合同要求您返回:

  • n<如果this被视为小于obj
  • ,则为0 如果this等于obj ,则
  • 0
  • n>如果this大于obj
  • ,则为0

这样您就可以为您的班级定义排序行为。

Arrays.sort(people);

请注意,您只需反转返回值的符号即可向后排序对象。

作为旁注,一些排序方法允许您传递Comparator以及要排序的集合,这使您可以定义除默认排序标准之外的其他排序标准。

Arrays.sort(people, new Comparator<Person>() { ... });