整数入力を使用して優先度付きキューを計算するプログラムが与えられました。
整数の代わりにオブジェクトを表すようにコードを書き直す方法は?
私のリビジョンの問題は、私の変更が実行されないと言うことです
オブジェクトは文字列ではなく整数(長い)です。したがって、それらを解析しようとしないでください。
あなたは変えることができます
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以外のタイプのオブジェクトでは機能しないため、おそらく役に立たないでしょう。
あらゆる種類のオブジェクトを比較できるようにしたい場合は、コンパレータを提供できます。
(ジェネリックスを使用して)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 型キャスト