そのため、コマンドラインから入力されたファイルの内容をアルファベット順に並べ替えるプログラムを作成しようとしています。ファイルを読み込んでから、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 のおかげで、ファイルの内容が適切に表示されました。テストを開始したときにコードに入力した名前で機能すると、アルファベット順に並べ替えられなくなりました。何か案は?