0

このプログラムは、挿入ソートを使用して、ファイルから最初の n 単語をソートします

これは私が作ったものではありません。教師が提供したこのプログラムを使用して、他のソート手法を実装するように依頼されました。ソースコードをインポートして実行したとき。それは言います:

スレッド「メイン」の例外 java.lang.ArrayIndexOutOfBoundsException: SortingAnalysis.main (SortingAnalysis.java:26) で 0

しかし、私たちの先生が私たちのクラスでそれを実演したとき、間違いはありませんでした。 また、ファイル名を指定せずにファイルから単語を並べ替える方法について

も疑問に思っています(例: tobesorted.txt)。JRE System Library 内にある限り、動作するのではないでしょうか。

import java.io.*;
import java.util.*;

/**
 * Compares the running times of sorting algorithms
 * @author bryann
 *
 */
public class SortingAnalysis {

    public static void insertionSort(String[] a) {
        int n = a.length;
        for(int i = 1; i < n; i++) {
            String cur = a[i];
            int j = i - 1;
            while((j >= 0) && (a[j].compareTo(cur) > 0)) {
                a[j + 1] = a[j--];
            } // end while
            a[j + 1] = cur;
        } // end for
    } // end insertionSort

    public static void main(String[] args) {
        final int NO_OF_WORDS = 5000;
        try {
            Scanner file = new Scanner(new File(args[0]));
            String[] words = new String[NO_OF_WORDS];

            int i = 0;
            while(file.hasNext() && i < NO_OF_WORDS) {
                words[i] = file.next();
                i++;
            } // end while
            long start = System.currentTimeMillis();
            insertionSort(words);
            long end = System.currentTimeMillis();
            System.out.println("Sorted Words: ");
            for(int j = 0; j < words.length; j++) {
                System.out.println(words[j]);
            } // end for        
            System.out.print("Running time of insertion sort: " + (end - start) + "ms");

        } // end try
        catch(SecurityException securityException) {
            System.err.println("You do not have proper privilege to access the files.");
            System.exit(1);
        } // end catch
        catch(FileNotFoundException fileNotFoundException) {
            System.err.println("Error accessing file");
            System.exit(1);
        } // end catch
    } // end main
} // end class SortingAnalysis

エラーはインポートによるものですか? Eclipse を使用して、
[ファイル] > [インポート] > [一般] > [ファイル システム] > [ディレクトリから] (彼が私たちに送ったフォルダー全体) > [フォルダーへ] (新しいプロジェクトを作成し、コードを「インポート」した場所があります) > 完了をクリックしました。

私を助けてください。実行できないため、割り当てを開始できません (つまり、同じソース ファイルで他の並べ替え手法を試します)。どうもありがとうございました!

4

2 に答える 2

1

プログラムのメイン関数は引数を取ります:

public static void main(String[] args) {

これらの引数は、コマンド ラインでプログラムに渡されるものです。

java SortingAnalysis /home/somebody/tobesorted.txt

この場合args[0]"/home/somebody/tobesorted.txt"

これにより、プログラムはどのファイルを開くかを知ることができます。

Scanner file = new Scanner(new File(args[0]));

しかし、ファイルへのパスを指定せずにプログラムを起動すると、args が短すぎて、これjava.lang.ArrayIndexOutOfBoundsException: 0 as args[0] doesn't existが得られます。

したがって、このエラーを取り除くためにソートするファイルへのパスを指定してください。例えば ​​:

java SortingAnalysis C:\somepath\tobesorted.txt

編集:

パスをハードコーディングする場合は、次のようにします。

Scanner file = new Scanner(new File("C:\\somepath\\tobesorted.txt"));

(二重に注意してください\\)。

于 2012-07-08T07:40:08.797 に答える
0
public static void main(String[] args) {
    ...
        Scanner file = new Scanner(new File(args[0]));

実行時に渡された最初の引数であるwordsファイルを探しています。次のように実行する必要があります。

java SortingAnalysis wordsfile.txt
于 2012-07-08T07:40:29.370 に答える