【问题标题】:java, putting priority of objects into an array by its self, then reassigning the sorted priority to correct objects HWjava,将对象的优先级自行放入数组中,然后将排序后的优先级重新分配给正确的对象HW
【发布时间】:2013-10-28 03:58:20
【问题描述】:

我正在尝试找出一种方法,在对每个受尊重的对象进行排序后重新分配它们的优先级。

每个对象都使用 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]);

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

线程“main”java.lang.ClassCastException 中的异常:homework4.orange 无法在 homework4.main4.main(main4.java:114) 中转换为 homework4.Meat

【问题讨论】:

  • 您是否想按照优先级对水果列表进行排序?
  • 它是一个食物列表,由水果(扩展食物)和肉类(也扩展食物)制成。

标签: java arrays sorting


【解决方案1】:

在你的 if 语句中,你有

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

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

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

【讨论】:

  • 我在 Food Abstract 类中通过 Source 创建了一个自动 getPriority,并将我的 IF 语句替换为 (list[j-1].getPriority() > list[j].getPriority());这行得通。谢谢
【解决方案2】:

您应该实现自定义comparator 并按优先级排序列表

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

【讨论】:

  • 关于硬件,可能只是实现 compareTo()
  • 可能对象Fruit可以在不同的上下文中使用,我认为按优先级排序不是主要排序。
  • 尝试此操作时出现错误:“集合类型中的方法 sort(List, Comparator super T>) 不适用于参数 (Food[],我的比较器)”
  • @user2803251 您需要创建新类MyComparator 并实现它或从Comparable 扩展您的类并覆盖equals、hashcode 函数。
  • 我这样做了:import java.util.Comparator; public class MyComparator { class priorityComparator implements Comparator { @Override public int compare(Food a, Food b) { return a.priority
猜你喜欢
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 2014-01-04
  • 2017-03-18
相关资源
最近更新 更多