2017-02-18 7 views
0

このコードの目的は、並べ替え済み配列を使用して優先度キューを作成することです。汎用オブジェクトはdouble値ではなくヌル値を取得します

現在、私はそれがあるべきではないと信じているときにnullを返すCオブジェクトを持っています。

関連するコード:

public class PQasSortedArray<C extends Comparable<? super C>> implements PQ<C> { 
    private C[] arr; 
    private int currentSize; 

public PQasSortedArray(int size) { 
     arr = (C[]) new Comparable[size]; 
     currentSize = 0; 
    } 
public void insert(C data){ 
     arr[currentSize++] = data; 
    } 

public C min(){ 
    C tmp = arr[0]; // <-- This gives tmp a value of null, which is not what I want 

    for(int i = 1; i < currentSize; i++) { // <-- This is skipped entirely as tmp is null 
     if(tmp.compareTo(arr[i]) > 0) { 
      tmp = arr[i]; 
     } 
    } 
    return tmp; 

} 

public C deleteMin(){ // <-- This also doesn't work as intended 
    C tmp = arr[0]; 
    arr[0] = arr[currentSize-1]; 
    arr[currentSize-1] = null; 
    currentSize--; 
    return tmp; 
} 

は、だから私はこれについて移動する方法が一般的にはかなりわからないよ:私のPQasSortedArrayクラスで

int n = 5; 
    PQ<Double> pq1 = new PQasSortedArray<Double>(n); 
    double[] arr1 = new double[n]; 

    for(int i = 0; i < n; i++){ 
     Random num = new Random(); //Assigning random double values to the array 
     arr1[i] = num.nextDouble(); 
    } 

    for (int i=0; i < arr1.length; i++){ 
     pq1.insert(arr1[i]); 
    } 
    for (int i=arr1.length-1; i >=0 ; i--){ 
     arr1[i] = pq1.deleteMin(); 
    } 

私は、次の関連するコードを持っています。私はジェネリック薬の使用に慣れていないので、何かを完全にはっきりと見逃す可能性があります。

public interface PQ<C extends Comparable<? super C>> { 
public boolean isFull(); 

public boolean isEmpty(); 

public void insert(C data); 

public C min(); 

public C deleteMin(); 

}

+1

最初のブロックに記載されているコードは、私がテストとして使用してきたものです。 5倍の値が指定された場合、出力は5倍の値になり、インデックスは-1で変更されるため、0が配列の最後になり、1が0になります。配列の最小値を削除し、サイズn-1元の配列はサイズnである。私は、挿入メソッドで配列の順序を最小にするように命令したいと思っていた部分を理解しましたが、tmpがnullになる理由はまだ分かりません。 – Nyxre

+0

"これはtmpが完全にスキップされます。" tmpがnullの場合はスキップする行はありません。しかし、currentSizeがゼロだった場合... – weston

+0

あなたのPQインタフェースを投稿してください。 – ceklock

答えて

0

試験currentSize == 1の終わり:

public C deleteFirst() { // <-- This also doesn't work as intended 
    C tmp = arr[0]; 
    arr[0] = arr[currentSize - 1]; 
    arr[currentSize - 1] = null; 
    currentSize--; 
    return tmp; 
} 

なる:Finaly

public C deleteFirst() { // <-- This also doesn't work as intended 
    C tmp = arr[0]; 
    arr[0] = arr[0]; 
    arr[0] = null; 
    currentSize--; 
    return tmp; 
} 

:[0] == NULLとcurrentSize ARR == 0.

tmp = arr [0] = = nullの:

public C min(){ 
    C tmp = arr[0]; // <-- This gives tmp a value of null, which is not what I want 

    for(int i = 1; i < currentSize; i++) { // <-- This is skipped entirely as tmp is null 
     if(tmp.compareTo(arr[i]) > 0) { 
      tmp = arr[i]; 
     } 
    } 
    return tmp; 

} 

あなたはこのようなものが必要です。

public C min() { 
    if (currentSize == 0) { 
     throw new RuntimeException("Size is 0."); 
    } 

    C tmp = arr[0]; // <-- This gives tmp a value of null, which is not what I want 

    for (int i = 1; i < currentSize; i++) { // <-- This is skipped entirely as tmp is null 
     if (tmp.compareTo(arr[i]) > 0) { 
      tmp = arr[i]; 
     } 
    } 
    return tmp; 

} 
関連する問題