我试图合并到整数字符串,但Dr.Java使用的程序是WIN';你不让我用ArrayUtils吗?

我试图合并到整数字符串,但Dr.Java使用的程序是WIN';你不让我用ArrayUtils吗?,java,arrays,drjava,Java,Arrays,Drjava,在本实验室中,您将创建一个程序,该程序合并两个非负(等于或大于0)整数数组。您的程序将接受每个数组作为键盘的输入。您事先不知道将输入多少个值,但可以假定每个数组的最大长度为10000个元素。要停止输入值,请输入负数。您可以忽略输入的任何负数,而不将其存储在数组中。 两个输入数组的元素应按递增顺序排列。换句话说,每个数组元素的值必须大于或等于前一个元素的值。数组可能包含重复的元素。 输入两个数组后,程序必须检查以确保每个数组的元素都按顺序输入。如果发现无序元素,则打印消息“错误:数组顺序不正确”。

在本实验室中,您将创建一个程序,该程序合并两个非负(等于或大于0)整数数组。您的程序将接受每个数组作为键盘的输入。您事先不知道将输入多少个值,但可以假定每个数组的最大长度为10000个元素。要停止输入值,请输入负数。您可以忽略输入的任何负数,而不将其存储在数组中。 两个输入数组的元素应按递增顺序排列。换句话说,每个数组元素的值必须大于或等于前一个元素的值。数组可能包含重复的元素。 输入两个数组后,程序必须检查以确保每个数组的元素都按顺序输入。如果发现无序元素,则打印消息“错误:数组顺序不正确”。 您的任务是将两个输入数组合并到一个新数组中,所有元素按从低到高的顺序排列。打印输入的每个原始数组,然后打印合并的数组。 请注意,您的程序输出的数组中,每个数字之间必须正好有一个空格。 样本运行1: 输入第一个数组的值(最多10000个值),输入负数退出

输入第二个数组的值(最多10000个值),输入负数退出

第一个阵列:

3 3 5 6 8 9 
4 5 7 2 
第二个阵列:

3 4 5 6 
3 3 3 3 3 3 
合并阵列:

3 3 3 4 5 5 6 6 8 9
样本运行2: 输入第一个数组的值(最多10000个值),输入负数退出

输入第二个数组的值(最多10000个值),输入负数退出

第一个阵列:

3 3 5 6 8 9 
4 5 7 2 
第二个阵列:

3 4 5 6 
3 3 3 3 3 3 
错误:数组顺序不正确

import java.io.*;
import static java.lang.System.*;

import java.util.Scanner;
import java.lang.Math;
import java.lang.Object;

import java.util.Arrays;
import java.util.ArrayList;
import org.apache.commons.lang3.ArrayUtils;



class Main
{

 public static void main (String str[]) throws IOException {
    {
        Scanner scan = new Scanner(System.in);

        int[] arrayone = new int[10000];
        int[] arraytwo = new int[10000];
        int [] mergeQ = new int[arrayone.length + arraytwo.length];
        int integers = 0;
        int inte = 0;


        System.out.println("\nEnter the values for the first array, up to 10000 values, enter a negative number to quit");

         for (int i = 0; i < arrayone.length; i++)
        {
            arrayone[i] = scan.nextInt();
            if (arrayone[i] < 0){
              break;
            } else {integers ++;}
        }


        System.out.println("\nEnter the values for the second array, up to 10000 values, enter a negative number to quit");
        for (int i=0; i<arraytwo.length; i++)
        {
            arraytwo[i] = scan.nextInt();

            if (arraytwo[i] < 0)
            {
                break;
            } {inte ++;}
        }


        System.out.println("First Array:");
        for (int i=0; i< integers; i++)
        {
          System.out.print(arrayone[i] + " ");
        }


        System.out.println("\nSecond Array:");
        for (int i=0; i< inte; i++)
        {
            System.out.print(arraytwo[i] + " ");
        }

      System.out.println("\nMerged Array:");{


        String[] both = ArrayUtils.addAll(arrayone[integer], arraytwo[inte]);
          Arrays.sort(both);

        }

        }
      }
    }
import java.io.*;
导入静态java.lang.System.*;
导入java.util.Scanner;
导入java.lang.Math;
导入java.lang.Object;
导入java.util.array;
导入java.util.ArrayList;
导入org.apache.commons.lang3.ArrayUtils;
班长
{
公共静态void main(字符串str[])引发IOException{
{
扫描仪扫描=新扫描仪(System.in);
int[]arrayone=新int[10000];
int[]arraytwo=新int[10000];
int[]mergeQ=newint[arrayone.length+arraytwo.length];
整数=0;
int inte=0;
System.out.println(“\n输入第一个数组的值,最多10000个值,输入一个负数以退出”);
for(int i=0;i
}{ inte++; }
将此更改为

}else {inte ++;}
一个解决办法是

int[] both = ArrayUtils.addAll(Arrays.copyOf(arrayone, integers), Arrays.copyOf(arraytwo,inte));
Arrays.sort(both);
for (int i=0; i< both.length; i++){
      System.out.print(both[i] + " ");

int[]both=ArrayUtils.addAll(Arrays.copyOf(arrayone,integers),Arrays.copyOf(arraytwo,inte));
数组。排序(两者);
for(int i=0;i
这是一个非常糟糕的方法,但是在你的CS课上会起作用

for (int i=0; i< integers; i++){
   mergeQ[i] = arrayone[i];
}
for (int i=integers; i< inte + integers; i++){
   mergeQ[i] = arraytwo[i - integers];
}
int both[] = Arrays.copyOf(mergeQ,integers+inte);
Arrays.sort(both);
for (int i=0; i< both.length; i++){
    System.out.print(both[i] + " ");
}
for(int i=0;i
注意:这种方式非常邪恶..内存效率低下..等等。。 这是另一种方法,它稍微干净一点,但性能与上面的方法大致相同

System.arraycopy(arrayone, 0, mergeQ, 0, integers);
System.arraycopy(arraytwo, 0, mergeQ, integers, inte);
int both[] = Arrays.copyOf(mergeQ,integers+inte);
Arrays.sort(both);
for (int i=0; i< both.length; i++){
    System.out.print(both[i] + " ");
}
System.arraycopy(arrayone,0,mergeQ,0,整数);
System.arraycopy(arraytwo,0,mergeQ,integers,inte);
int both[]=Arrays.copyOf(mergeQ,integers+inte);
数组。排序(两者);
for(int i=0;i
do
int[]tware=ArrayUtils.addAll(Arrays.copyOfRange(arrayone,0,integer-1),Arrays.copyOfRange(arraytwo,0,inte-1));
This修复了它…我只需将“integer”改为“integers”…谢谢你的帮助!!
int[]tware=ArrayUtils.addAll(Arrays.copyOf(arraryone,integers-1),Arrays.copyOf(arrarytwo,inte-1))
试试这个,当我查看错误时,我正确地找到了答案…再次感谢!!@Minato为什么它要将Int和Int都打印为“合并数组:[I@a166bd“您共享的代码正在编译,但我将其作为输出接收[I@5b4bc4e6@WilliamGuyton你能分享第一个数组和第二个吗?从上面的原始代码可以看出,每个数组都是由用户手动输入的。当用户输入负数时,数组中断,然后第二个数组开始接收用户输入的数据。这两个数组应该先打印,然后c按数字顺序组合。我能做些什么来解决这个问题吗?见鬼……所以我的计算机科学课使用的CODERUNNER程序说它有一个错误。Main.java:292:error:not find symbol int[]both=ArrayUtils.addAll(Arrays.copyOf(arrayone,integers),Arrays.copyOf(arraytwo,inte));^symbol:变量数组直到位置:类主1错误
System.arraycopy(arrayone, 0, mergeQ, 0, integers);
System.arraycopy(arraytwo, 0, mergeQ, integers, inte);
int both[] = Arrays.copyOf(mergeQ,integers+inte);
Arrays.sort(both);
for (int i=0; i< both.length; i++){
    System.out.print(both[i] + " ");
}