Как исправить эту программу сортировки пузырьков? - PullRequest
0 голосов
/ 31 октября 2009
package arraySort;

import java.io.IOException;
import java.io.File;
import java.util.*;

public class openFile {
    int x;
    static int i;
    static int[] myList = {100};

    public static void main(String[] args){
        try{
            File myFile = new File("arraySort.txt");
            Scanner scan = new Scanner(myFile);
            while(scan.hasNext()){                
                myList[i] = scan.nextInt();
                BubbleSort(myList);
                System.out.println(myList[i]);                                
         } 
         catch(IOException e){
             System.out.println("File not found!");
         }
    }
    public static void BubbleSort(int[] x){
        if (x[i] > x[i + 1]){
            int temp;
            temp = x[i];
            x[i] = x[i+1];
            x[i+1] = temp;
        }
    }
}

Ответы [ 5 ]

6 голосов
/ 31 октября 2009

Вместо того, чтобы дать вам ответ прямо, вот пара подсказок:

  1. У вас нет петель в BubbleSort().

  2. Вы должны звонить BubbleSort() только один раз, после вы прочитали все числа из файла. То есть переместить вызов за пределы цикла while.

  3. Вы никогда не увеличиваете переменную i, поэтому вы просто перезаписываете myList[0] каждый раз через цикл while.

  4. Размеры массивов не изменяются. Если вы попытаетесь присвоить myList[1] или myList[2], вы получите ошибку ArrayIndexOutOfBoundsException. Есть несколько способов решить эту проблему - один из них изменить с int[] myList = {100} на ArrayList myList = new ArrayList(). Вы можете добавить к нему числа с помощью myList.add(number) и просмотреть их с помощью myList.get(i).

2 голосов
/ 31 октября 2009

В вашей программе несколько проблем, не только связанных с сортировкой.

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. После этого вы можете приступить к работе алгоритма сортировки пузырьков. Помните, что нужно быть осторожным с индексами вашего массива, чтобы вы никогда не обращались за пределы массива.

1 голос
/ 31 октября 2009

http://www.leepoint.net/notes-java/data/arrays/32arraybubblesort.html <- какой-нибудь пример пузырьковой сортировки для вас;) </p>

0 голосов
/ 31 октября 2009

Когда вы закончите это задание, вы можете оценить Collections.sort ():)

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collections.html#sort%28java.util.List%29

0 голосов
/ 31 октября 2009

Изменить это:

 try{
    File myFile = new File("arraySort.txt");
    Scanner scan = new Scanner(myFile);
    while(scan.hasNext()){                
        myList[i] = scan.nextInt();
        BubbleSort(myList);
        System.out.println(myList[i]);
 } 
 catch(IOException e){
     System.out.println("File not found!");
 }

до:

try{
    File myFile = new File("arraySort.txt");
    Scanner scan = new Scanner(myFile);
    while(scan.hasNext()){                
        myList[i] = scan.nextInt();
 } 
 catch(IOException e){
     System.out.println("File not found!");
 }

 BubbleSort(myList);
 System.out.println(myList[i]);

}

Изменить метод сортировки в соответствии с ответом: @ Federico

...