/ / ArrayList InsertionSort проблеми - java, масиви, списък, сортиране, вмъкване

ArrayList InsertionSort проблеми - java, масиви, списък, сортиране, вмъкване

Опитвам се да направя програма за сортиране по вмъкване с аралайн, но аз получавам грешки по някои от нещата в него.

Всеки път, когато се опитвам да стартирам програмата си, тя казва:

Изключение в конец "main" java.lang.IndexOutOfBoundsException: Индекс: 5, Размер: 5 в java.util.ArrayList.rangeCheck (ArrayList.java:635) в java.util.ArrayList.get (ArrayList.java:411) в 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));
}


}

}

Отговори:

3 за отговор № 1
for (c = 1; c < InsertionSort.size(); c++) --> ; <-- {
lock = InsertionSort.get(c);
System.out.println(lock);

Проблемът е, че имате ";" зад затварянето ")" на вашия за цикъл. Това също е причината, поради която тя ви казва, че променливата к не се използва.

АКТУАЛИЗАЦИЯ въз основа на коментар:

Методите GET връщат само стойността подпозиция "а". Така вашите "k" и "h" променливи са само числа. Те не показват никъде. Ако искате да зададете стойност "a" на стойността "a + 1", трябва да направите следното:

insertionSort.set(a+1, h);

0 за отговор № 2

List е нула базирана структура от данни (свързаният Javadoc казва отчасти, че той хвърля един IndexOutOfBoundsException ако индексът е извън диапазона (индекс <0 || index> = размер ())). Това означава, че са валидни индекси 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<>();