0

该程序使用插入排序对文件中的前 n 个单词进行排序

这不是我做的。我们被要求使用老师提供的这个程序来实施其他分类技术。我导入了源代码,并在我运行它时。它说:

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 0 在 SortingAnalysis.main(SortingAnalysis.java:26)

但是当我们的老师在我们的课堂上演示它时,它没有错误。

我也想知道它是如何在不说明文件名的情况下对文件中的单词进行排序的(例如 tobesorted.txt)。也许只要它在 JRE 系统库中,它就可以工作,不是吗?

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]));

它正在寻找运行它时传入的第一个参数,即单词文件。您需要将其运行为:

java SortingAnalysis wordsfile.txt
于 2012-07-08T07:40:29.370 回答