我的问题是 ( - 编写以下合并两个排序列表的方法 到一个新的排序列表中。编写一个测试程序,提示用户输入两个排序列表并显示合并列表。这是一个示例运行。请注意,输入中的第一个数字表示列表中元素的数量。 - )
当我运行此代码时,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);
}
}
谢谢..:)
最佳答案
Although not exceed index...
是的,你这样做:
for (int i = 0; i <= list3.length; i++)
// ----------------^
索引的有效范围是0
至length - 1
,所以应该是 <
就像代码的其他几个部分一样。
旁注:您还会在数组中的几个位置跳过第一个元素:
for (int i = 1; i < list1.length; i++)
// ----------^
关于java - 虽然没有超过索引,但索引出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29075359/