我正在尝试使用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));
}
}
}
答案 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()))。这意味着有效索引为0
到n - 1
(其中n
为size
)。
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<>();