Java 合并已按递增顺序排序的两个数组
我需要将两个数组合并到一个数组中。这两个数组已经按递增顺序排序,我应该将它们合并到另一个数组中。首先,我们应该比较数组1和数组2,将较小的数组放在数组3中,只增加受影响的索引。如果一个数组完全合并,我们应该复制第二个数组的其余部分。 这是我的代码,直到我知道我不知道为什么它给了我出界Java 合并已按递增顺序排序的两个数组,java,arrays,merge,Java,Arrays,Merge,我需要将两个数组合并到一个数组中。这两个数组已经按递增顺序排序,我应该将它们合并到另一个数组中。首先,我们应该比较数组1和数组2,将较小的数组放在数组3中,只增加受影响的索引。如果一个数组完全合并,我们应该复制第二个数组的其余部分。 这是我的代码,直到我知道我不知道为什么它给了我出界 import java.util.Scanner; public class Problem5 { public static void main(String[] args) {
import java.util.Scanner;
public class Problem5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
System.out.println("Enter the size of the two arrays: ");
int s1=scan.nextInt();
int s2=scan.nextInt();
System.out.println("Enter "+s1+" numbers sorted in the increasing order:");
int[] array1=new int[s1];
for(int i=0;i<array1.length;i++)
array1[i]=scan.nextInt();
System.out.println("Enter "+s2+" numbers sorted in the increasing order:");
int[] array2=new int[s2];
for(int i=0;i<array2.length;i++)
array2[i]=scan.nextInt();
int[] array3=new int[s1+s2];
System.out.print("The result of merging the two arrays is : ");
mergeArrays(array1,array2,array3);
for(int i=0;i<array3.length;i++)
System.out.print (array3[i]+" ");
}
public static void mergeArrays(int[] array1,int[] array2,int[] array3){
int one=0;
int two=0;
for(int k=0;k<array3.length;k++){
if(one<array1.length && array1[one]<array2[two]){
array3[k]=array1[one++];
System.out.println(array3[k]);}
else if( two<array2.length && array2[two]<array1[one] ){
array3[k]=array2[two++];
System.out.println(array3[k]);}}
}
}
公共静态void合并数组(int[]array1、int[]array2、int[]array3){
int-one=0;
int 2=0;
for(int k=0;k=array1.length |两个=array2[two]){
array3[k]=array2[two++];
System.out.println(array3[k]);
}
}
}
您是否尝试过使用调试器单步执行此操作?调试器会立即告诉您问题所在。
Enter the size of the two arrays:
3
5
Enter 3 numbers sorted in the increasing order:
2
8
14
Enter 5 numbers sorted in the increasing order:
1
9
12
17
20
Exception in thread "main" The result of merging the two arrays is : 1
2
8
9
12
14
java.lang.ArrayIndexOutOfBoundsException: 3
at Problem5.mergeArrays(Problem5.java:33)
at Problem5.main(Problem5.java:22)
public static void mergeArrays(int[] array1, int[] array2, int[] array3) {
int one = 0;
int two = 0;
for (int k = 0; k < array3.length; k++) {
if (one < array1.length && array1[one] < array2[two]) { // <== (D) On the next step you try to get array2[two] which is out of bounds.
array3[k] = array1[one++]; // <== (A) On last array1 element you make one == array1.length
System.out.println(array3[k]);
}
else if (two < array2.length && array2[two] < array1[one]) { // <== (B) On the next step you try to get array1[one] which is out of bounds.
array3[k] = array2[two++]; // <== (C) On last array2 element you make two == array2.length
System.out.println(array3[k]);
}
}
}
public static void mergeArrays(int[] array1, int[] array2, int[] array3) {
int one = 0;
int two = 0;
for (int k = 0; k < array3.length; k++) {
if (two >= array2.length || one < array1.length && array1[one] < array2[two]) {
array3[k] = array1[one++];
System.out.println(array3[k]);
}
else if (one >= array1.length || two < array2.length && array1[one] >= array2[two]) {
array3[k] = array2[two++];
System.out.println(array3[k]);
}
}
}