2012-10-16 11 views
-2

我得到了一个使用整数输入计算优先级队列的程序。我不知道如何重写程序以使用对象而不是整数值,但问题很少

如何重写代码来表示对象而不是整数?

我修改的问题是,我的修改无法运行,并说

+0

什么会比整数不同的对象是什么意思?比较会是什么?它是基于Comparable吗? –

+0

@dystroy,我和你一样知道:)我只是在摸索这个问题:D – HelpNeeder

+1

我假设你有一个原因,你不能使用内建的'PriorityQueue',并且可以阅读它的代码以查看它的代码它的工作;) –

回答

1

你的对象是不是字符串,但整数(长)。所以不要试图解析它们。

你可以改变

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) 

为了避免演员阵容。

但这不适用于其他类型的对象比长,所以不可能对你有用。

如果你希望能够比较任何类型的对象,你可以提供一个Comparator

你会定义PriorityQPriorityQ<T>(使用泛型),加setComparator(Comparator comparator)方法,并这样定义您的插入方法:

public void insert(T item) 
... 

if ((comparator.compare(item, queArray[j])>0) { 

该装置还改变queArray阵列到T[]类型。

+0

当我这样做,它会导致相同的错误。 – HelpNeeder

+0

是的,问题是我必须改变这个程序来使用任何对象,这意味着它必须使用泛型。 – HelpNeeder

+0

您不能更改程序以使用任何对象,因为在内部使用了比较。 –

0

问题是您使用Integer类型值调用insert(Object item)函数。

然后您尝试将其转换为字符串:(String) item

这不起作用。使用item.toString()转换为String。

虽然你在它,你应该阅读:Java type casting

相关问题