我正在做我的AP计算机科学作业,我遇到了一个奇怪的索引出界错误:
java.lang.ArrayIndexOutOfBoundsException: 3
at Main.main(T1_L28_Template.java:68)
以下是问题:
在本实验中,您将创建一个程序,该程序合并两个非负(等于或大于0)整数数组。您的程序将接受每个数组作为键盘的输入。您不知道将输入多少个值,但您可以假设每个阵列的最大长度为10,000个元素。要停止输入值,请输入负数。您可以忽略任何负数输入,而不是将它们存储在数组中。
两个输入数组的元素应按递增顺序排列。换句话说,每个数组元素必须具有大于或等于前一个元素值的值。数组可能包含重复的元素。
输入两个数组后,程序必须检查以确保按顺序输入每个数组的元素。如果找到乱序元素,则打印消息“错误:数组不正确顺序”。
您的任务是将两个输入数组合并为一个新数组,所有元素按顺序排列,从最低到最高。打印输入的每个原始数组,然后打印合并的数组。 请注意,您的程序必须输出每个数字之间只有一个空格的数组。
Sample Run 1:
Enter the values for the first array, up to 10000 values, enter a negative number to quit
3
3
5
6
8
9
-1
Enter the values for the second array, up to 10000 values, enter a negative number to quit
3
4
5
6
-5
First Array:
3 3 5 6 8 9
Second Array:
3 4 5 6
Merged Array:
3 3 3 4 5 5 6 6 8 9
Sample Run 2:
Enter the values for the first array, up to 10000 values, enter a negative number to quit
4
5
7
2
-1
Enter the values for the second array, up to 10000 values, enter a negative number to quit
3
3
3
3
3
3
-100
First Array:
4 5 7 2
Second Array:
3 3 3 3 3 3
ERROR: Array not in correct order
这是我的代码:
import java.io.*;
import static java.lang.System.*;
import java.util.Scanner;
import java.lang.Math;
class Main{
public static void main (String str[]) throws IOException {
Scanner scan = new Scanner(System.in);
System.out.println("Enter the values for the first array, up to 10000 values, enter a negative number to quit");
int first[] = new int[10000];
int inttt=0;
int intt=0;
for(int i=0; i<first.length; i++)
{
first [i] = scan.nextInt();
inttt++;
if(first[i]<0)
{
break;
}
}
System.out.println("Enter the values for the second array, up to 10000 values, enter a negative number to quit");
int second[] = new int[10000];
for(int i=0; i<second.length; i++)
{
second [i] = scan.nextInt();
intt++;
if(second[i]<0)
{
break;
}
}
int mergeone[]=new int[inttt-1];
for(int i=0; i<mergeone.length;i++)
mergeone[i]=first[i];
int mergetwo[]=new int[intt-1];
for(int i=0; i<mergetwo.length;i++)
mergetwo[i]=second[i];
System.out.print("First Array:");
for(int i=0; i<mergeone.length; i++)
System.out.print(" "+mergeone[i]);
System.out.println(" ");
System.out.print("Second Array:");
for(int i=0; i<mergetwo.length; i++)
System.out.print(" "+mergetwo[i]);
int lengthone = mergeone.length;
int lengthtwo = mergetwo.length;
int mi;
int t=Integer.MAX_VALUE;
int mix[] = new int[lengthone+lengthtwo];
for(int i=0;i<mix.length;i++)
{
mix[i]=mergeone[i];
mix[(i+lengthone)]=mergetwo[i];
if (mix [i]< t)
t = mix[i];
}
for(int i=mix.length-1;i>=0;i--)
{
if(mergeone[i-1]>mergeone[i] || mergetwo[i-1]>mergetwo[i])
{
System.out.println("ERROR: Array not in correct order");
}
else
{
mix [0] = t;
if(mix[i]<mix[i-1])
{
mi = mix[i];
mix[i]=mix[i-1];
mix[i-1]= mi;
}
System.out.print("Merged Array:");
for(int in=0; in<mix.length;in++)
System.out.print(" "+mix[in]);
}
}
}
}