Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 合并已按递增顺序排序的两个数组_Java_Arrays_Merge - Fatal编程技术网

Java 合并已按递增顺序排序的两个数组

Java 合并已按递增顺序排序的两个数组,java,arrays,merge,Java,Arrays,Merge,我需要将两个数组合并到一个数组中。这两个数组已经按递增顺序排序,我应该将它们合并到另一个数组中。首先,我们应该比较数组1和数组2,将较小的数组放在数组3中,只增加受影响的索引。如果一个数组完全合并,我们应该复制第二个数组的其余部分。 这是我的代码,直到我知道我不知道为什么它给了我出界 import java.util.Scanner; public class Problem5 { public static void main(String[] args) {

我需要将两个数组合并到一个数组中。这两个数组已经按递增顺序排序,我应该将它们合并到另一个数组中。首先,我们应该比较数组1和数组2,将较小的数组放在数组3中,只增加受影响的索引。如果一个数组完全合并,我们应该复制第二个数组的其余部分。 这是我的代码,直到我知道我不知道为什么它给了我出界

       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]);
        }
    }

}