ArrayList InsertionSort问题

时间:2016-01-23 15:24:40

标签: java arrays list sorting insertion

我正在尝试使用arraylist创建一个Insertion排序程序,但我在其中的一些内容上遇到错误。

每当我尝试运行我的程序时,它会说:

  

线程“main”中的异常java.lang.IndexOutOfBoundsException:Index:   5,大小:5,java.util.ArrayList.rangeCheck(ArrayList.java:635)at   java.util.ArrayList.get(ArrayList.java:411)at   NewInsertionSort.main(NewInsertionSort.java:20)

但我不明白我在哪里称之为“超出界限”。

接下来,它说我的局部变量“k”的值从未使用过,但应该是......

如果有人可以帮助我,那就太好了,谢谢你的支持。

这是我的代码:

import java.util.ArrayList;


public class NewInsertionSort {

    public static void main(String[] args) {

        ArrayList <Integer> InsertionSort = new ArrayList <Integer>(); 
        InsertionSort.add(1);
        InsertionSort.add(52);
        InsertionSort.add(21);
        InsertionSort.add(45);
        InsertionSort.add(27); 


        Integer a; 
        Integer lock; 
        Integer c; 
        for (c = 1; c < InsertionSort.size(); c++);{
            lock = InsertionSort.get(c); 
            System.out.println(lock); 


            for (a = c - 1; (a >= 0) && (InsertionSort.get(a) < lock); a--){
                 Integer k = InsertionSort.get(a+1); 
                 Integer h = InsertionSort.get(a);

                 k = h;   
            } 
            lock = InsertionSort.get(a+1);  

        }

        for(int z=0;z < InsertionSort.size(); z++){
            System.out.println(InsertionSort.get(z)); 
        }


    }

}

2 个答案:

答案 0 :(得分:3)

for (c = 1; c < InsertionSort.size(); c++) --> ; <-- {
            lock = InsertionSort.get(c); 
            System.out.println(lock); 

问题是你有一个&#39 ;;&#39;结束后&#39;)&#39;你的for循环。这也是为什么它告诉你不使用变量k的原因。

根据评论更新:

GET方法只返回&#39; a&#39;下的值。位置。所以你的&#39;&#39;并且&#39; h&#39;变量只是数字。他们没有指向任何地方。如果你想分配&#39; a&#39;价值为&#39; a + 1&#39;你必须这样做:

insertionSort.set(a+1, h);

答案 1 :(得分:0)

List是基于零的数据结构(链接的Javadoc部分地说,如果索引超出范围,它会抛出IndexOutOfBoundsException (索引&lt; 0 || index&gt; = size()))。这意味着有效索引为0n - 1(其中nsize)。

for (c = 1; c < InsertionSort.size(); c++) {
    lock = InsertionSort.get(c - 1); 

for (c = 0; c < InsertionSort.size(); c++) {
    lock = InsertionSort.get(c); 

此外,按照惯例,变量名称以小写字母开头。因此InsertionSort应为insertionSort(或仅insertionList)。最后,您可以使用Java 7+ 中的菱形运算符,您应该编程到List 接口。像,

List<Integer> insertionList = new ArrayList<>();