2017-06-16 55 views
2

我試圖合併到具有相同尺寸的int類型的陣列。這裏是我的代碼合併兩個陣列中交替的方式

public class classA 
{ 
static int[] mergeArray(int[] arr1, int arr2[]) 
{ 
    int arr3[] = new int[arr1.length+ arr2.length]; 
    int count = 0; 
    for(int i = 0; i < arr1.length; i++){ 
     arr3[count] = arr1[i]; 
     count++; 
     arr3[count] = arr2[i]; 
    } 
    for(int i = 0; i < arr3.length; i++){ 

     System.out.print(arr3[i]); 
    } 
    return arr3; 
} 

public static void main(String[] args) throws IOException 
{ 
    int arr1[] = {1,2,3}; 
    int arr2[] = {4,5,6}; 
    int arr3[] = mergeArray(arr1,arr2); 
} 
} 

當我試圖在第一個for循環打印數字,它給了我1,4,2,5,3,6其正確的輸出。但是,當我嘗試在第一個循環之外打印它時,它會給我輸出1,2,3,6,0,0。有人能幫我嗎? TIA

+1

你忘了'計數++'加上'後ARR2 [I]'值 –

回答

3

在你for循環,當你從arr2複製你需要增加你的count

arr3[count] = arr2[i]; 
count++; 

你也可以簡化你的代碼有點像,

static int[] mergeArray(int[] arr1, int[] arr2) { 
    int[] arr3 = new int[arr1.length * 2]; 
    int count = 0; 
    for (int i = 0; i < arr1.length; i++) { 
     arr3[count++] = arr1[i]; 
     arr3[count++] = arr2[i]; 
    } 
    return arr3; 
} 

而且printmain

int arr3[] = mergeArray(arr1, arr2); 
System.out.println(Arrays.toString(arr3)); 

在Java中8+ ,使用flatMapIntStream

static int[] mergeArray(int[] arr1, int[] arr2) { 
    return IntStream.range(0, arr1.length) 
      .flatMap(i -> IntStream.of(arr1[i], arr2[i])).toArray(); 
} 

了相同的結果。

+0

Elliontt,怎麼不給予好評這樣一個偉大的答案嗎?感謝分享! –

2

按照你的代碼,你忘了追加第二個值後升級計數:

public class classA 
{ 
static int[] mergeArray(int[] arr1, int arr2[]) 
{ 
    int arr3[] = new int[arr1.length+ arr2.length]; 
    int count = 0; 
    for(int i = 0; i < arr1.length; i++){ 
     arr3[count] = arr1[i]; 
     count++; 
     arr3[count] = arr2[i]; 
     count++; //////////////// here! 
    } 
    for(int i = 0; i < arr3.length; i++){ 

     System.out.print(arr3[i]); 
    } 
    return arr3; 
} 

public static void main(String[] args) throws IOException 
{ 
    int arr1[] = {1,2,3}; 
    int arr2[] = {4,5,6}; 
    int arr3[] = mergeArray(arr1,arr2); 
} 
} 

解釋:

在你的代碼,你做count++;只有一次在福爾循環,但是,foor循環從0到arr1.length,等於arr3.length/2,這意味着你忘記了一半的值,這就是0出現在這裏的原因,因爲當你啓動一個新數組時,默認值在int []中爲0.

2

使用arr3[count+1] = arr2[i]count += 2代替。

它可能比使用count ++兩次容易理解。

static int[] mergeArray(int[] arr1, int arr2[]) 
{ 
    int arr3[] = new int[arr1.length+ arr2.length]; 
    int count = 0; 
    for(int i = 0; i < arr1.length; i++){ 
     arr3[count] = arr1[i]; 
     arr3[count+1] = arr2[i]; ///////here 
     count+=2; ///////and here 
    } 
    for(int i = 0; i < arr3.length; i++){ 

     System.out.print(arr3[i]); 
    } 
    return arr3; 
} 
+0

沒有沒有我的朋友......那也不行......如果他這樣做,輸出將是:405060 –

+1

我剛剛有了一個test.The產量爲142536 – lihongxu

+1

我沒有看到ARR3 [數+ 1 = ARR2 [I];線,我的壞,所以加一哈哈,我測試了錯誤。對不起:) –