В вашей программе несколько проблем, не только связанных с сортировкой.
static int[] myList = {100};
Эта строка определяет myList
как массив размером 1, содержащий единственный элемент 100
. Тогда ваш основной цикл -
while(scan.hasNext()) {
myList[i] = scan.nextInt();
BubbleSort(myList);
System.out.println(myList[i]);
}
Вы не увеличиваете i
в этом цикле, поэтому вы просто перезаписываете одно значение в myList
любым значением, которое вы читаете из файла. И когда ваша Bubblesort
функция пытается получить доступ к myList[i+1]
, она выдает ArrayIndexOutOfBoundsException
, потому что нет элемента с индексом i+1
(что равно 1
, поскольку вы не увеличиваете i
).
В целом, и особенно для начинающих, лучше использовать ArrayList
, чем обычный массив. Кроме того, вы должны сначала заполнить массив и только после того, как он будет иметь все элементы, вы должны попытаться отсортировать его. Наконец, лучше сделать переменные локальными, а не членами класса. Таким образом, ваша main
функция будет выглядеть примерно так:
ArrayList myList = new ArrayList();
while(scan.hasNext()) {
myList.append(scan.nextInt());
}
Bubblesort(myList);
А затем измените Bubblesort
на ArrayList
, и затем вы также можете сделать индекс цикла i
локальным для метода Bubblesort
. После этого вы можете приступить к работе алгоритма сортировки пузырьков. Помните, что нужно быть осторожным с индексами вашего массива, чтобы вы никогда не обращались за пределы массива.