2017-10-20 107 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); 
    } 

    } 
} 
相关问题