2011-11-04 47 views
0

我在試圖找到一個數組的最小值。該數組包含節點 - 節點包含元素E和優先級int。我想找到最小優先級的陣列中的節點。java array nullpointer

@Override 
public E min() { 
    Node temp = S[0]; 
    for(int i = 1; i<S.length; i++){ 
     int prio= S[i].getPrioritet(); <-- nullpointer excp. 
     if(prio<temp.getPrioritet()){ 
      temp = S[i]; 
     } 
    } 
    return temp.getElement(); 

但是當我嘗試使用它時,我得到一個空指針異常。有人知道我做錯了什麼嗎?

這是我的測試:

PrioritetArraySorteret<String> p = new PrioritetArraySorteret<String>(); 

    p.insert(1, "Hello"); 
    p.insert(3, "Hi"); 
    p.insert(4, "Hawdy"); 
    System.out.println(p.min()); 

} 
+1

對(INT I = 1; I i從1開始? S.length有多少?在這種情況下,似乎S [i]爲空.... – hovanessyan

回答

0

它只是意味着在陣列S的指標之一的元素爲空。也許你已經初始化了一個大小爲n的數組,但填充的位置不到n

改變這樣可能會解決這個問題:

for(int i = 1; i<S.length; i++){ 
    if(S[i] != null) { 
     int prio= S[i].getPrioritet(); <-- nullpointer excp. 
     if(prio<temp.getPrioritet()){ 
      temp = S[i]; 
     } 
    } 
} 

這就是說,你可能會在這裏重新發明輪子了一下。使用一個簡單的ArrayList參數化某種類型,您可以定義哪種封裝值和優先級。然後,您可以有一個類型實現Comparable與使用優先級的方法compareTo,或者寫一個Comparator用於查找最低:

List<YourType<String>> list = new ArrayList<YourType<String>>(); 
Collections.min(list); 

或者,如果您使用的是自定義的比較:

Collections.min(list, yourComparator); 

- 編輯爲min而不是sort。抱歉。

0

數組S未被初始化或者一個/多個元素已被初始化。

1

開始以i = 0作爲陣列被索引

for(int i = 0; i<S.length; i++){ 
    int prio= S[i].getPrioritet(); <-- nullpointer excp. 
    if(prio<temp.getPrioritet()){ 
     temp = S[i]; 
    } 
} 
+0

不,因爲我將數組中的其他元素與數組中的第一個元素進行比較 - > Node temp = S [0]; – uthen

+0

這實際上並沒有解決問題,索引必須從1開始比較第二個元素,因爲第一個元素被用作最小值的引物。 –

+0

true,但它不會對結果產生任何影響,並且是在數組中只有一個項目時要執行的操作的簡單解決方案 – Edd