虽然没有超过索引,但我得到索引的错误

时间:2015-03-16 11:09:21

标签: java arrays sorting

我的问题是 ( - 编写以下合并两个排序列表的方法 进入一个新的排序列表。编写一个测试程序,提示用户输入两个已排序的列表并显示合并列表。这是一个示例运行。请注意,输入中的第一个数字表示列表中元素的数量。 - )

当我运行此代码时,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);
    }
}

谢谢..:)

1 个答案:

答案 0 :(得分:3)

  

虽然没有超过索引...

是的,你做了:

for (int i = 0; i <= list3.length; i++)
// ----------------^

索引的有效范围是0length - 1,因此它应该是<,就像代码的其他几个部分一样。


旁注:您还在一些地方跳过数组中的 第一个 元素:

for (int i = 1; i < list1.length; i++)
// ----------^