0

在对每个受人尊敬的对象进行排序后,我试图找出一种方法来重新分配优先级。

每个对象都使用 setter 从用户那里获得优先级。然后我使用 getPriorities 创建一个 Int 数组,以便对它们进行排序。

     Food[] list = new Food[3];

    int[] priorityArray = {(int) ((Fruit) list[0]).getPriority(), (int) ((Fruit) list[1]).getPriority(), (int) ((Meat) list[2]).getPriority() };

在对优先级整数数组进行排序后,如何将每个优先级重新分配给正确的对象?制作数组时,我将 getPriorities 转换为常规整数。

我会直接通过 getPriorities 对优先级进行排序,如下所示:

        Food temp;
    System.out.println("\nsorted list:\n");
   for (int i = 0; i < list.length; i++) {


       for (int j = 1; j < (list.length - i); j++)  {
           if (((Fruit) list[j-1]).getPriority() > ((Fruit) list[j]).getPriority()||((Fruit) list[j-1]).getPriority() > ((Meat) list[j]).getPriority()||((Meat) list[j-1]).getPriority() > ((Fruit) list[j]).getPriority()||((Meat) list[j-1]).getPriority() > ((Meat) list[j]).getPriority()) 


           {
            temp = list[j - 1];
            list[j - 1] = list[j];
            list[j] = temp;

           }
       }    


       System.out.println(list[i]);

但是当我这样做时会出错:

线程“主”java.lang.ClassCastException 中的异常:homework4.orange 不能在 homework4.main4.main(main4.java:114) 处转换​​为 homework4.Meat

4

2 回答 2

2

在您的 if 语句中,您有

 ((Meat) list[j]).getPriority()

当 j = 1 时,您正在将 Fruit 对象类型转换为 Meat 对象。这是抛出错误。

是否可以删除 if 语句中的类型转换?似乎 getPriority() 方法可以放入 Food 类并在需要时覆盖。

于 2013-10-28T04:09:18.900 回答
1

您应该按照优先级实现自定义比较器和排序列表

Collections.sort(list, new MyComparator());.

于 2013-10-28T04:02:59.113 回答