2014-10-31 88 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