2014-10-31 47 views
0

我想写一个接收两个数组并连接它们的方法。现在我收到错误“线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException:2”。我不明白为什么会发生这种情况。有人可以解释为什么我得到这个错误?在Java中连接数组?

public static int [ ] concat (int [ ] nums1, int [ ] nums2) 

    { 
     int length = nums1.length+nums2.length; 
     int nums3 [] = new int [length]; 
     for (int i=0; i<nums1.length; i++) 
     { 
      int value = nums1 [i]; 
      nums3 [i]=value; 
     } 
     for (int i=0; i<(nums1.length+nums2.length); i++) 
     { 
      int value=nums2 [i]; //It says I have an error on this line but I do not understand why. 
     length = nums1.length+1; 
      nums3 [length]= value; 
     } 
     return nums3; 

    } 
+1

请制定一个问题。你在问为什么你会得到一个异常?你有没有调试过的代码?你用纸和笔走过了它吗? – 2014-10-31 00:58:43

+0

如果你看到你得到的例外,这将是非常有用的。它有一个行号。看看代码中的行并找出错误。 (我想我只是通过检查发现了错误,但在异常中查看行号有助于确认我的猜测)。 – markspace 2014-10-31 01:00:29

回答

0

这是一个工作示例:

import java.util.Arrays; 

public class test{ 
     public static int [] concat (int [] nums1, int [] nums2) 
     { 
       int length = nums1.length+nums2.length; 
       int nums3 [] = new int [length]; 
       for (int i=0; i<nums1.length; i++) 
       { 
         nums3[i] = nums1[i]; 
       } 
       // You can start adding to nums3 where you had finished adding 
       // in the previous loop. 
       for (int i=nums1.length; i< nums3.length; i++) 
       { 
         // (i - nums1.length) will give you zero initially and 
         // ends with nums2.length by the time this loop finishes 
         nums3[i]= nums2[i - nums1.length]; 
       } 
       return nums3; 

     } 

     public static void main(String[] args) { 

       int[] temp = {1,2,3,4}; 
       int[] temp2 = {1,2,3,4}; 
       System.out.println(Arrays.toString(concat(temp,temp2))); 


     } 

} 

您也可以使用该方法addAllArrayUtils,将其添加在一起,在这个线程Arrayutils thread指出,但如果你想明确写出方法,然后这应该工作。

1

你的第二个循环是跨越级联长度,当你希望它只是跨越nums2的长度。

试试这个:

for (int i=nums1.length; i<nums2.length; i++) 
    { 
     int value=nums2 [i - num1.length]; 
     nums3 [i]= value; 
    } 
+0

您的代码不包含任何打印或分配给num2数组。发布其余的代码,以便我们可以看到为什么会发生这种情况 – CharlieS 2014-10-31 01:11:57

1

使用Apache Commons Lang库。

String[] concat = ArrayUtils.addAll(nums1, nums2); 

API