2011-06-12 122 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