2012-02-14 101 views
-2

此代碼在調用compareTo()的第20行拋出空指針異常。任何關於如何使其發揮作用的建議?Java Integer類和compareTo()

package exam1review; 

import java.util.Random; 

public class ArrayTester { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 

    int result, max=0; 

    Integer[] myArray = new Integer[10]; 
    Random rand = new Random(); 
    for (int i = 0; i < 10; i++) { 
     myArray[i] = rand.nextInt(); 
     System.out.println(myArray[i]); 
     while (i != myArray.length - 1) { 
      result = myArray[i].compareTo(myArray[i+1]); 
      if (result > 0) 
       max = myArray[i]; 
      else 
       max = myArray[i+1]; 
     } 
    } 
    System.out.println(max); 
} 

}

+1

是否有使用'Integer'而不是'int'的理由? – 2012-02-14 22:37:16

+3

也''我'永遠不會改變內循環,所以它必然是無限的。 – yurib 2012-02-14 22:39:32

+0

爲什麼你這樣找到最大值?這對於這麼簡單的任務來說太複雜了...... – 2012-02-14 22:40:12

回答

1

問題是,您正在循環播放i,但您的比較會在設置之前嘗試與myArray[i+1]進行比較。

先填充數組,然後查找最大值。

像這樣:

package cruft; 

import java.util.Random; 

public class ArrayTester { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     Integer[] myArray = new Integer[10]; 
     Random rand = new Random(); 
     for (int i = 0; i < myArray.length; i++) { 
      myArray[i] = rand.nextInt(); 
     }   
     for (Integer value : myArray) { 
      System.out.println(value); 
     } 
     System.out.println(String.format("max value: %d", findMax(myArray))); 
    } 

    public static int findMax(Integer [] values) { 
     int max = Integer.MIN_VALUE; 

     if (values != null) { 
      for (Integer value : values) { 
       if (value.compareTo(max) >= 1) { 
        max = value; 
       } 
      } 
     } 

     return max; 
    } 
} 
+0

謝謝。你們是對的;簡單的錯誤,我想我已經清醒過久了。 – 2012-02-14 22:52:43

1

需要初始化myArray的非空值。

1

Integer[]數組用10 null值初始化。您需要將它們設置爲實際數字,或更好 - 使用int[]代替。

如果你想保持你的邏輯,你需要兩個循環 - 一個用來填充數組,另一個用來查找最大值。

2

三個問題:

  1. 您試圖訪問myArray[i+1],而你只能在你的for循環的下一個迭代初始化 ,這causeing你的NPE 。
  2. 您的條件是(i != myArray.length - 1),稍後訪問 myArray[i+1],這是i == myArray.length - 1的界限。
  3. while循環:while (i != myArray.length - 1)從第一次起,它似乎永遠不會被終止,因爲你不會在其中增加i
2

,在您執行

result = myArray[i].compareTo(myArray[i+1]); 

數組元素myArray[i+1]尚未設定任何東西的地步。它的值爲空。