我试图合并到整数字符串,但Dr.Java使用的程序是WIN';你不让我用ArrayUtils吗?
在本实验室中,您将创建一个程序,该程序合并两个非负(等于或大于0)整数数组。您的程序将接受每个数组作为键盘的输入。您事先不知道将输入多少个值,但可以假定每个数组的最大长度为10000个元素。要停止输入值,请输入负数。您可以忽略输入的任何负数,而不将其存储在数组中。 两个输入数组的元素应按递增顺序排列。换句话说,每个数组元素的值必须大于或等于前一个元素的值。数组可能包含重复的元素。 输入两个数组后,程序必须检查以确保每个数组的元素都按顺序输入。如果发现无序元素,则打印消息“错误:数组顺序不正确”。 您的任务是将两个输入数组合并到一个新数组中,所有元素按从低到高的顺序排列。打印输入的每个原始数组,然后打印合并的数组。 请注意,您的程序输出的数组中,每个数字之间必须正好有一个空格。 样本运行1: 输入第一个数组的值(最多10000个值),输入负数退出 输入第二个数组的值(最多10000个值),输入负数退出 第一个阵列:我试图合并到整数字符串,但Dr.Java使用的程序是WIN';你不让我用ArrayUtils吗?,java,arrays,drjava,Java,Arrays,Drjava,在本实验室中,您将创建一个程序,该程序合并两个非负(等于或大于0)整数数组。您的程序将接受每个数组作为键盘的输入。您事先不知道将输入多少个值,但可以假定每个数组的最大长度为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
doint[]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] + " ");
}