2017-10-20 88 views
3

問題是編寫一個程序,該程序需要兩個數組,每個數組有10個整數a和b。 c是一個有20個整數的數組。程序應該將數組a和b放入數組c中,數組a中的前10個整數,後b箇中的後10個。然後程序應該顯示c。這是迄今爲止的代碼。它將arrayA中的值打印到arrayC中,但我不知道如何將arrayB中的值打印到arrayC中而不覆蓋arrayC(arrayB)中已有的信息。將兩個數組複製到一個數組中

public class questionTwo 
{ 
    public static void main(String[] args) 
    { 
    int [] arrayA = {31, 14, 5, 12, 50, 80, 100, 29, 58, 57}; 
    int [] arrayB = {9, 13, 156, 78, 36, 46, 86, 98, 63, 2}; 
    int [] arrayC = new int [20]; 

    for (int i = 0; i < arrayA.length; i++) 
     arrayC[i] = arrayA[i]; 

    for (int i = 0; i < arrayB.length; i++) 
    { 
     int element = 9; 
     arrayC[element] = arrayB[i]; 
     element++; 
    } 


    System.out.println("The values of ArrayC are: "); 

    for(int val : arrayC) 
    { 
     System.out.println(val); 
    } 

    } 
} 

回答

3

你真的很接近!你的第二個循環,每次初始化element到9,而你應該只有一次在年初將其分配到10:

int element = 10; 
for (int i = 0; i < arrayB.length; i++) 
{ 
    arrayC[element] = arrayB[i]; 
    element++; 
} 
+0

它的工作!謝謝!! – Malia

+4

「它工作!」:你確定?你應該已經得到了31,14,5,12,50,80,100,29,58,57,9,13,156,78,36,46,86,98,63,2的最終結果,但我敢打賭你取而代之的是'31,14,5,12,50,80,100,29,58,9,13,156,78,36,46,86,98,63,2,0'。 '元素'應該從10開始(或者更好,'arrayA.length',而不是9)。 –

+0

是的,我注意到了這個錯誤,所以我將它設置爲10並且它工作了 – Malia

5

在解釋你會如何解決當前的代碼,我首先建議您使用長度創建arrayCarrayAarrayB(這裏有相同的實際的結果,但它的優點是,您可以添加更多的元素到arrayAarrayB而無需修改代碼)。接下來,在真實代碼中,我將使用System.arraycopy來執行副本。並使用Arrays.toString(int[])進行打印。像,

int[] arrayA = { 31, 14, 5, 12, 50, 80, 100, 29, 58, 57 }; 
int[] arrayB = { 9, 13, 156, 78, 36, 46, 86, 98, 63, 2 }; 
int[] arrayC = new int[arrayA.length + arrayB.length]; 
System.arraycopy(arrayA, 0, arrayC, 0, arrayA.length); 
System.arraycopy(arrayB, 0, arrayC, arrayA.length, arrayB.length); 
System.out.println(Arrays.toString(arrayC)); 

至於你的原代碼,使用arrayA.lengthi以獲得正確的偏移量。像,

int[] arrayC = new int[arrayA.length + arrayB.length]; 
for (int i = 0; i < arrayA.length; i++) { 
    arrayC[i] = arrayA[i]; 
} 
for (int i = 0; i < arrayB.length; i++) { 
    arrayC[i + arrayA.length] = arrayB[i]; 
} 
0

第二個循環是錯誤的。你可以使用如下代碼:

int [] arrayA = {31, 14, 5, 12, 50, 80, 100, 29, 58, 57}; 
int [] arrayB = {9, 13, 156, 78, 36, 46, 86, 98, 63, 2}; 
int [] arrayC = new int [20]; 

System.arraycopy(arrayA, 0, arrayC, 0, arrayA.length); 
System.arraycopy(arrayB, 0, arrayC, arrayA.length, arrayB.length); 

System.out.println("The values of ArrayC are: "); 

for(int val : arrayC) { 
    System.out.println(val); 
} 
0

你的第二個循環是不正確,因爲你設置element每次循環中9;因此,它的值總是在下一次迭代開始時重置。您可以將其移到循環外部以實現您要查找的結果。另外,我建議根據arrayAarrayB的長度構建arrayC,這樣就可以組合任意長度的數組。另外,我還建議移動代碼將數組合併到一個方法中,以保持事物的清潔和可重用,以便將來的工作。

public class questionTwo { 

    private static int[] combineArrays(int[] arrayA, int[] arrayB) { 
    int[] arrayC = new int[arrayA.length + arrayB.length]; 
    int idx = 0; 

    for (int x : arrayA) { 
     arrayC[idx] = x; 
     idx++; 
    } 

    for (int x : arrayB) { 
     arrayC[idx] = x; 
     idx++; 
    } 

    return arrayC; 
    } 

    public static void main(String[] args) { 
    int[] arrayA = {31, 14, 5, 12, 50, 80, 100, 29, 58, 57}; 
    int[] arrayB = {9, 13, 156, 78, 36, 46, 86, 98, 63, 2}; 

    int[] arrayC = combineArrays(arrayA, arrayB); 

    System.out.println("The values of ArrayC are: "); 

    for(int val : arrayC) { 
     System.out.println(val); 
    } 
    } 

} 

另外,使用Java的原始數組通常被認爲是不好的做法。查看List和相關對象以獲得更靈活和更全面的選項。

0

當您需要向數組中添加更多項目時,使您的函數具有動態性。我還沒有測試,但我希望它能工作。

public class questionTwo 
{ 
    public static void main(String[] args) 
    { 
    int [] arrayA = {31, 14, 5, 12, 50, 80, 100, 29, 58, 57}; 
    int [] arrayB = {9, 13, 156, 78, 36, 46, 86, 98, 63, 2}; 
    int [] arrayC = new int [arrayA.length + arrayB.length]; 

    for (int i = 0; i < arrayA.length; i++) 
     arrayC[i] = arrayA[i]; 

    int element = arrayA.length; 
    for (int i = 0; i < arrayB.length; i++) 
    { 
     arrayC[element+i] = arrayB[i]; 
    } 

    System.out.println("The values of ArrayC are: "); 

    for(int val : arrayC) 
    { 
     System.out.println(val); 
    } 

    } 
} 
相關問題