java - 虽然没有超过索引,但索引出现错误

标签 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);
    }
}

谢谢..:)

最佳答案

Although not exceed index...

是的,你这样做:

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

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

<小时/>

旁注:您还会在数组中的几个位置跳过第一个元素:

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

关于java - 虽然没有超过索引,但索引出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29075359/

相关文章:

jQuery ui - 克隆代码不响应排序

java - MySQL审计表: hibernate-envers vs Triggers

C 程序 : Update unsigned char pointer array with function

Javascript数组排序问题

在 C 中检查结构数组是否为 'empty'

c - 对 2 组数组进行求和时遇到问题

Postgresql - 不正确的排序

java - 在 Spring jdbcDaoSupport 中使用不同的数据库

java - 前端Java,后端C++,如何加入?

java - Java 类中方法和字段访问修饰符的简写?