我正在尝试合并到具有相同大小的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。但是,当我尝试在第一个for循环外打印它时,它给出了输出1,2,3,6,0,0。有人能帮我吗? TIA
答案 0 :(得分: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;
}
print
中的main
喜欢
int arr3[] = mergeArray(arr1, arr2);
System.out.println(Arrays.toString(arr3));
Java 8+中的 或,请使用flatMap
和IntStream
之类的
static int[] mergeArray(int[] arr1, int[] arr2) {
return IntStream.range(0, arr1.length)
.flatMap(i -> IntStream.of(arr1[i], arr2[i])).toArray();
}
得到相同的结果。
答案 1 :(得分: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);
}
}
解释
在你的代码中,你只需要在foor循环中执行一次count++;
,但是,foor循环从0到arr1.length,等于arr3.length / 2,这意味着你忘记了一半值0,这就是0出现在这里的原因,因为当你启动一个新数组时,int []中的默认值为0。
答案 2 :(得分: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;
}
答案 3 :(得分:0)
您只需要添加两个值,然后增加第k个值即可。
static int[] array1 = { 1, 2, 3, 4,9 };
static int[] array2 = { 5, 6, 7, 8 };
private static void mergeArrays(int[] arr1, int[] arr2) {
int[] arr3 = new int[arr1.length + arr2.length];
int k = 0;
for (int i = 0,j=0; i < arr1.length && j < arr2.length; i++,j++) {
arr3[k] = arr1[i];
arr3[++k] = arr2[j];
k++;
}
for (int i = 0; i < arr3.length; i++) {
System.out.println("arr3: " + arr3[i]);
}
}