2011-06-12 230 views
2

任何人都可以告訴我這個方法有什麼問題,爲什麼它會給出一個nullpointerException?比較2 int數組

public boolean check(){ 

    Scanner scan = new Scanner(System.in); 

    int[] arr1 = new int []{1,2,3}; 
    int[] arr2 = new int[]{}; 

    for(int i = 0;i<arr1.length;i++) 
    { 
     System.out.println("Enter numbers to check"); 
     arr2[i] = scan.nextInt(); 
    } 

    if(arr1 == arr2) 
     return true; 

    return false; 
} 
+2

arr2初始化時沒有元素,表示數組的長度爲0.使用int [] arr2 =而不是新的int [arr1.length]。 – esaj 2011-06-12 12:08:40

回答

2
Scanner scan = new Scanner(System.in); 
int[] arr1 = new int[]{1,2,3}; 
int[] arr2 = new int[arr1.length]; 
for (int i = 0 ; i < arr1.length ; i++) { 
    System.out.println("Enter numbers to check"); 
    arr2[i] = scan.nextInt(); 
    if (arr1[i] != arr2[i]) 
    return false; 
} 
return true; 
5

您沒有爲arr2分配足夠的內存。在這種情況下,arr2與0

你的3號線的長度初始化應該是這樣的:

int[] arr2 = new int[arr1.length]; 

此外,if(arr1 == arr2)正確的方法來比較兩個數組是否有相同的元素。

相反,您可以使用java.util.Arrays.equals()來檢查您的兩個數組是否相等。

2

你不分配任何大小ARR2所以導致其聲明大小0在其中輸入值最終導致空值.... 也喜歡你這樣做,你不能比較陣列即使你可以一個數組爲空將不會給任何結果........... 嘗試initializng arr2與大小和登錄,而不是做(arr1 == arr2)...嘗試循環和找到答案...會給你答案....... 希望如果有幫助.... :)

+1

感謝您的解釋。現在我明白爲什麼它錯了。 – Splitter 2011-06-12 12:27:03