2013-11-14 1 views
-1

Я пытаюсь использовать несколько методов сортировки для текстового файла. Я могу получить filereader для работы, однако он не сортирует arrays. Когда я сделал это вручную без filereader, это действительно сработало. Здесь я использую простой вид пузыря, поскольку он работал вручную, но теперь не привык.Сортировка алгоритмов в одном приложении Java с использованием FileReader

Это мой код:

public class BubbleSort { 

public static void main(String[] args) throws Exception { 

    File f=new File("filename.txt"); 
    FileReader fr = new FileReader(f); 
    BufferedReader br = new BufferedReader(fr); 

    ArrayList alist = new ArrayList(); 
    String s = br.readLine(); 
    while (s != null) 
    { 
     alist.add(Integer.parseInt(s)); 
     s = br.readLine(); 
    } 

    int[] iArray = new int[alist.size()]; 
    for (int i = 0; i < alist.size(); i++) 
      iArray[i] = (int) alist.get(i); 

    System.out.println(alist + " "); 
    bubbleSort(iArray); 
    printarray(iArray); 
    fr.close(); 
    }//end loop 

    public static void bubbleSort(int[] alist) { 

    int outer, inner; 
     for (outer = alist.length - 1; outer > 0; outer--) { // counting down 
      for (inner = 0; inner < outer; inner++) { // bubbling up 
       if (alist[inner] > alist[inner + 1]) { // if out of order... 
        int temp = alist[inner]; // ...then swap 
        alist[inner] = alist[inner + 1]; 
        alist[inner + 1] = temp; 
       } 
      } 
     } 
    } 

    public static void printarray (int []alist){ 

     for (int i = 0; i < alist.length;i++){ 
      System.out.println("" + alist); 
     } 
    } 
} 
+0

показать нам порядок –

ответ

1

Итак, в первую очередь, следует добавить общую декларацию на ваш ArrayList, так что вы можете позволить Java решить, как распаковывать значение.

ArrayList alist = new ArrayList(); 

должен быть

ArrayList<Integer> alist = new ArrayList<Integer>(); 

-

iArray[i] = (int) alist.get(i); 

будет

iArray[i] = alist.get(i); 

В любом случае ваш код работает, но вы должны быть намного проще о выводе этих массивов (Dont пусть javas verbosity ge т к вашей логике)

System.out.println(alist.toString()); 

    bubbleSort(iArray); 

    System.out.println(Arrays.toString(iArray)); 

ваша программа выводит для меня:

[144, 3, 1, 5, 4, 9, 9, 13] 
[1, 3, 4, 5, 9, 9, 13, 144] 
1

Я предполагаю, что ваш код компиляции и вы просто опустили импорт.

Ваш код, кажется, работает, проблема при печати результирующего массива, вы печатаете весь массив каждый раз на цикле:

public static void printarray (int []alist){ 
for (int i = 0; i < alist.length;i++){ 
    System.out.println("" + alist); //Printing entire array 
} 
} 

Следует печать каждого значения:

public static void printarray (int []alist){ 
for (int i = 0; i < alist.length;i++){ 
    System.out.println("" + alist[i]); //Index added 
} 
} 

Кроме того, у меня есть несколько предложений:

  1. Избегайте выбрасывание исключения из основного метода, и вместо этого блок try/catch обрабатывает ошибку.
  2. Код использует пространство doble в памяти при создании массива ArrayList и примитивного массива, чтобы сделать его лучше использовать только одну структуру.
  3. Также рассмотрите использование дженериков для типов безопасных коллекций.

С уважением.