我得到了一个程序,它使用整数输入来计算优先级队列。
如何重写代码来表示对象而不是整数?
我修改的问题是我的修改无法运行并说
您的对象不是字符串,而是整数(长整数)。所以不要试图解析它们。
你可以改变
if( Long.parseLong((String) item) > Long.parseLong((String) queArray[j]) )
到
if ((Long) item) > (Long) queArray[j]) )
你也可以改变
public void insert(Object item)
到
public void insert(Long item)
为了避免演员。
但这不适用于 Long 以外的其他类型的对象,因此可能对您没有用处。
如果您希望能够比较任何类型的对象,您可以提供一个Comparator:
您将定义PriorityQ
为PriorityQ<T>
(使用泛型),添加一个setComparator(Comparator comparator)
方法,并像这样定义您的插入方法:
public void insert(T item)
...
if ((comparator.compare(item, queArray[j])>0) {
这意味着还将 queArray 数组更改为一种T[]
类型。
问题是您insert(Object item)
使用整数类型值调用该函数。
然后您尝试以这种方式将其转换为 String:(String) item
.
这行不通。用于item.toString()
将某些内容转换为字符串。
当您阅读它时,您应该阅读以下内容:Java 类型转换