Сортировка слиянием по алфавиту, ранее работала с заранее определенными именами, но не с файлами командной строки

Поэтому я пытаюсь написать программу, которая сортирует содержимое файла, набранного из командной строки в алфавитном порядке. У меня проблемы с чтением в файле и последующим копированием его из arrayList "myArrayList" в массив "myList", который будет напечатан в моем "main", вот мой код:

import java.io.*;
import java.io.File ;
import java.util.*;
import java.util.Scanner ;
import java.io.FileNotFoundException ;

public class MergeSortLines {
public static void main(String[] args)
   throws FileNotFoundException {
    loadArray(args[0]) ;
}

public static String[] loadArray(String fileName)
   throws FileNotFoundException {
  String[] myList = null ;
  ArrayList<String> myArrayList = new ArrayList<String>();
  if ( (fileName != null) && (!fileName.equals("")) ) {
    Scanner input = new Scanner(new File(fileName)) ;
    while (input.hasNextLine()) {
        String a = input.nextLine();
        myArrayList.add(a);
    }
    myList = myArrayList.toArray(new String[] {});
    System.out.println(Arrays.toString(myList));

  }
 return myList ;
}


public static void mergeSort(String[] a) {
    if (a.length >= 2) {
        String[] left = new String[a.length / 2];
        String[] right = new String[a.length-a.length / 2];

        for (int i = 0; i < left.length; i++)
        {
            left[i] = a[i];
        }
        for (int i = 0; i < right.length; i++)
        {
            right[i] = a[i + a.length / 2];
        }

        mergeSort(left);
        mergeSort(right);

        merge(a, left, right);
    }
}

public static void merge(String[] result, String[] left, String[] right) {
    int i1 = 0;
    int i2 = 0;
    for (int i = 0; i < result.length; i++) {
        if (i2 >= right.length || (i1 < left.length &&
                             left[i1].compareToIgnoreCase(right[i2])<0)) {
                  result[i] = left[i1];
                  i1++;
             } else {
                  result[i] = right[i2];
                  i2++;
             }
        }
    }
}

он компилируется правильно, но я получаю код ошибки NoSuchElementException при запуске. Мои вопросы: правильно ли я сделал цикл while для сканера? Как правильно использовать toArray()? и, наконец, если у меня неправильное представление, как правильно скопировать файл в массив? Спасибо, я ценю любую помощь!РЕДАКТИРОВАТЬ Благодаря HoverCraft Full of Eels, содержимое файла отображается правильно, теперь он не сортируется по алфавиту, когда работает с именами, которые я вставил в код, когда я начал его тестировать! есть идеи?

1 ответ

Решение

Чтобы ответить на мой собственный вопрос, я не стал вызывать методы для их выполнения, чтобы mergeSort правильно сортировал мой список.

Другие вопросы по тегам