我的问题是 ( - 编写以下合并两个排序列表的方法 进入一个新的排序列表。编写一个测试程序,提示用户输入两个已排序的列表并显示合并列表。这是一个示例运行。请注意,输入中的第一个数字表示列表中元素的数量。 - )
当我运行此代码时,Eclipse会给出错误。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at single_dimension_all_arrays.Merge_two_sorted_lists.getNumber(Merge_two_sorted_lists.java:60)
at single_dimension_all_arrays.Merge_two_sorted_lists.main(Merge_two_sorted_lists.java:77)
我无法理解为什么会出错。我不能超过索引。
private static void sort(int [] list3)
{
int temp=0;
for (int i = 0; i < list3.length; i++)
{
for (int j = 0; j < list3.length; j++)
{
if(list3[i]<list3[j])
{
temp=list3[i];
list3[i]=list3[j];
list3[j]=temp;
}
}
}
for (int i = 0; i < list3.length; i++)
{
System.out.println(list3[i]);
}
}
private static void getNumber(int [] list1,int [] list2)
{
Scanner scan = new Scanner(System.in);
int [] list3 = new int[list1.length+list2.length];
for (int i = 1; i < list1.length; i++)
{
System.out.println("Please, enter the number");
list1[i] = scan.nextInt();
}
for (int i = 1; i < list2.length; i++)
{
System.out.println("Please,enter the number");
list2[i]= scan.nextInt();
}
for (int i = 0; i <= list3.length; i++)
{
if(i<list1.length)
{
list3[i]=list1[i];
}
else if(i>list1.length)
{
list3[i] = list2[i];
}
}
sort(list3);
}
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Please,enter the length of list1");
int l1 = scan.nextInt();
System.out.println("Please, enter the length of list2");
int l2 = scan.nextInt();
int [] list1 = new int[l1];
int [] list2 = new int[l2];
list1[0]=l1;
list2[0]=l2;
getNumber(list1,list2);
}
}
谢谢..:)
答案 0 :(得分:3)
虽然没有超过索引...
是的,你做了:
for (int i = 0; i <= list3.length; i++)
// ----------------^
索引的有效范围是0
到length - 1
,因此它应该是<
,就像代码的其他几个部分一样。
旁注:您还在一些地方跳过数组中的 第一个 元素:
for (int i = 1; i < list1.length; i++)
// ----------^