2017-02-18 3 views
0

이 코드의 목적은 정렬 된 배열을 사용하여 우선 순위 대기열을 만드는 것입니다.일반 객체는 double 값보다는 null 값을 얻습니다.

현재 내가 있어야한다고 생각하지 않을 때 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(); 

} 시험 currentSize == 1의 끝에서

+1

첫 번째 블록에 나열된 코드는 내가 테스트로 사용했던 것입니다 :

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; } 

당신이 뭔가를해야합니다. 5 개의 double 값이 주어지면, 결과는 인덱스가 -1로 변경된 5 개의 double 값이므로 0은 배열의 마지막이되고 1은 0이됩니다. 배열의 최소값을 삭제하고 다음의 배열을 반환합니다. 크기 n-1 원래 배열은 크기 n입니다. 내가하고 싶은 부분의 일부를 알아 냈어 배열에서 삽입 - 메서드에서 가장 큰 주문했지만 여전히 tmp null이 왜 혼란스러워. – Nyxre

+0

"tmp가 null 일 때 완전히 건너 뜁니다"tmp가 null 인 경우 건너 뛸 행은 없습니다. 그러나 currentSize가 0 인 경우 ... – weston

+0

PQ 인터페이스를 게시하십시오. – ceklock

답변

0

:

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; 
} 

가된다 :

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 == 0.

tmp = arr [0] = = 널 (null) :

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; 

}