问题是编写一个程序,它接受两个10个整数的数组,a和b。 c是一个包含20个整数的数组。程序应该将数组a和b放入数组c中,c的前10个整数来自数组a,后10个来自b。然后程序应该显示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);
}
}
}
答案 0 :(得分:5)
在解释如何修复当前代码之前,我建议您使用arrayC
和arrayA
的长度创建arrayB
(此处具有相同的实用< / em>结果,但它的优点是您可以在不修改代码的情况下向arrayA
或arrayB
添加更多元素。接下来,在实际代码中,我将使用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.length
和i
来获取正确的偏移量。像,
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];
}
答案 1 :(得分:3)
你真的很亲密!你的第二个循环每次都会将element
初始化为9,而你应该只在开头时将其分配给10个:
int element = 10;
for (int i = 0; i < arrayB.length; i++)
{
arrayC[element] = arrayB[i];
element++;
}
答案 2 :(得分: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);
}
答案 3 :(得分:0)
您的第二个循环不正确,因为您每次都在循环中将element
设置为9
;因此,它的值总是在开始下一次迭代时重置。您可以将其移出循环以获得您正在寻找的结果。另外,我建议根据arrayC
和arrayA
的长度构建arrayB
,这样就可以组合任意长度的数组。
此外,我还建议移动代码,将数组合并到一个方法中,以保持清洁和可重复使用,以备将来使用。
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
及相关对象,以获得更灵活,功能更全的选项。
答案 4 :(得分: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);
}
}
}