Java ArrayList插入排序问题
我正试图用arraylist创建一个插入排序程序,但在其中的一些方面出现了错误 每当我尝试运行我的程序时,它都会显示: 线程“main”java.lang.IndexOutOfBoundsException中的异常:索引: 5,大小:5位于java.util.ArrayList.rangeCheck(ArrayList.java:635)处 get(ArrayList.java:411)位于 main(NewInsertionSort.java:20) 但我不明白我在哪里把它叫做“出界” 接下来,它说我的局部变量“k”的值从未使用过,但它应该 如果有人能帮助我,那太好了,谢谢你的支持 这是我的密码:Java ArrayList插入排序问题,java,arrays,list,sorting,insertion,Java,Arrays,List,Sorting,Insertion,我正试图用arraylist创建一个插入排序程序,但在其中的一些方面出现了错误 每当我尝试运行我的程序时,它都会显示: 线程“main”java.lang.IndexOutOfBoundsException中的异常:索引: 5,大小:5位于java.util.ArrayList.rangeCheck(ArrayList.java:635)处 get(ArrayList.java:411)位于 main(NewInsertionSort.java:20) 但我不明白我在哪里把它叫做“出界” 接下来
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));
}
}
}
import java.util.ArrayList;
公共类NewInsertionSort{
公共静态void main(字符串[]args){
ArrayList InsertionSort=新的ArrayList();
InsertionSort.add(1);
插入排序。添加(52);
InsertionSort.add(21);
InsertionSort.add(45);
插入排序。添加(27);
整数a;
整数锁;
整数c;
对于(c=1;c=0)和&(InsertionSort.get(a)
是一种基于零的数据结构(链接的Javadoc在某种程度上说,如果索引超出范围(index<0 | | index>=size()),它会抛出一个错误)。这意味着有效索引是0
到n-1
(其中n
是大小
)
是一个基于零的数据结构(链接的Javadoc部分表示,如果索引超出范围(index<0 | | index>=size()),它将抛出一个错误)。这意味着有效索引是0
到n-1
(其中n
是大小
)
谢谢,我不知道我怎么没看到,但它还是说K没用?是的。。因为k没有被使用。将h的值赋给变量k,但。。。之后就不用了。所以这是毫无意义的。我甚至不明白为什么你先分配给k,然后分配给h,然后再分配给k。。。您可以删除h变量并分配InsertionSort.get(a);直接到k。但即使这样,你也必须在代码中的某个地方使用它。我正试图将a的值赋给a+1的值,所以我得到这两个值并用它们生成变量,然后将这些变量设置为彼此相等的值。谢谢,我不知道我怎么没有看到它,但它仍然说K没有被使用?是的。。因为k没有被使用。将h的值赋给变量k,但。。。之后就不用了。所以这是毫无意义的。我甚至不明白为什么你先分配给k,然后分配给h,然后再分配给k。。。您可以删除h变量并分配InsertionSort.get(a);直接到k。但即使这样,你也必须在代码中的某个地方使用它。我试图将a的值赋给a+1的值,因此我得到这两个值,并用它们生成变量,然后将这些变量设置为彼此相等
for (c = 1; c < InsertionSort.size(); c++) {
lock = InsertionSort.get(c - 1);
for (c = 0; c < InsertionSort.size(); c++) {
lock = InsertionSort.get(c);
List<Integer> insertionList = new ArrayList<>();
for (c = 1; c < InsertionSort.size(); c++) --> ; <-- {
lock = InsertionSort.get(c);
System.out.println(lock);
insertionSort.set(a+1, h);