我正在尝试合并两个整数字符串,但是 Java 博士我正在使用的程序不允许我使用 ArrayUtils?
I am trying to merge to integer strings but Dr. Java the program I am using won't let me use ArrayUtils?
在本实验中,您将创建一个合并两个非负(等于或大于 0)整数数组的程序。您的程序将接受每个数组作为来自键盘的输入。您事先不知道将输入多少个值,但可以假定每个数组的最大长度为 10,000 个元素。要停止输入值,请输入一个负数。您可以忽略任何输入的负数并且不将它们存储在数组中。
两个输入数组的元素应按升序排列。换句话说,每个数组元素的值必须大于或等于前一个元素值。数组可能包含重复的元素。
输入两个数组后,您的程序必须检查以确保每个数组的元素已按顺序输入。如果发现乱序元素,打印消息“错误:数组顺序不正确”。
您的任务是将两个输入数组合并为一个新数组,所有元素按从低到高的顺序排列。打印出输入的每个原始数组,然后是合并后的数组。
请注意,您的程序必须输出每个数字之间恰好有一个 space 的数组。
示例 运行 1:
输入第一个数组的值,最多10000个值,输入负数退出
3
3
5
6
8
9
-1
输入第二个数组的值,最多10000个值,输入负数退出
3
4
5
6
-5
第一个数组:
3 3 5 6 8 9
第二个数组:
3 4 5 6
合并数组:
3 3 3 4 5 5 6 6 8 9
样本运行 2:
输入第一个数组的值,最多10000个值,输入负数退出
4
5
7
2
-1
输入第二个数组的值,最多10000个值,输入负数退出
3
3
3
3
3
3
-100
第一个数组:
4 5 7 2
第二个数组:
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);
}
}
}
}
you were adding elements but not the arrays themselves.
在你的第二个循环中
}{ 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] + " ");
一个非常糟糕的方法..但在你的 CS 中会起作用 class
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] + " ");
}
注意:这种方式很邪恶..内存效率低下..等..
这是另一种方式,它更简洁一些,但性能与上面的大致相同..
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] + " ");
}
在本实验中,您将创建一个合并两个非负(等于或大于 0)整数数组的程序。您的程序将接受每个数组作为来自键盘的输入。您事先不知道将输入多少个值,但可以假定每个数组的最大长度为 10,000 个元素。要停止输入值,请输入一个负数。您可以忽略任何输入的负数并且不将它们存储在数组中。 两个输入数组的元素应按升序排列。换句话说,每个数组元素的值必须大于或等于前一个元素值。数组可能包含重复的元素。 输入两个数组后,您的程序必须检查以确保每个数组的元素已按顺序输入。如果发现乱序元素,打印消息“错误:数组顺序不正确”。 您的任务是将两个输入数组合并为一个新数组,所有元素按从低到高的顺序排列。打印出输入的每个原始数组,然后是合并后的数组。 请注意,您的程序必须输出每个数字之间恰好有一个 space 的数组。 示例 运行 1: 输入第一个数组的值,最多10000个值,输入负数退出
3 3 5 6 8 9 -1
输入第二个数组的值,最多10000个值,输入负数退出
3 4 5 6 -5
第一个数组:
3 3 5 6 8 9
第二个数组:
3 4 5 6
合并数组:
3 3 3 4 5 5 6 6 8 9
样本运行 2: 输入第一个数组的值,最多10000个值,输入负数退出
4 5 7 2 -1
输入第二个数组的值,最多10000个值,输入负数退出
3 3 3 3 3 3 -100
第一个数组:
4 5 7 2
第二个数组:
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);
}
}
}
}
you were adding elements but not the arrays themselves.
在你的第二个循环中
}{ 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] + " ");
一个非常糟糕的方法..但在你的 CS 中会起作用 class
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] + " ");
}
注意:这种方式很邪恶..内存效率低下..等..
这是另一种方式,它更简洁一些,但性能与上面的大致相同..
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] + " ");
}