2012-07-08 94 views
0

此程序使用插入排序對來自文件的前n個單詞進行排序。

這不是由我做的。我們被要求使用我們的老師提供的這個程序來實現其他分類技術。我導入了源代碼,當我運行它。它說:文件和插入排序。線程「main」中的異常java.lang.ArrayIndexOutOfBoundsException:0

異常線程 「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,我剛按下
文件>導入>常規>文件系統>目錄(他送給我們整個文件夾)>進入文件夾(我創建了一個新的項目,還有就是我「進口」代碼)>完成

請幫幫我。我無法從作業開始(即在同一源文件中嘗試其他排序技術),因爲我無法運行它。非常感謝你!

+1

添加了「作業」標記...您嘗試過什麼,可以從eclipse調試器開始。在這種情況下,你也應該發佈異常堆棧跟蹤,它應該告訴你異常發生的位置(行)。 – home 2012-07-08 07:35:06

+0

謝謝,回家! – 2012-07-08 07:52:36

回答

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

但是,如果啓動程序時未提供文件路徑,則參數太短,您得到此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")); 

(注意雙\\)。

+0

謝謝版主!呃,按路徑,你的意思是我應該指定目錄? – 2012-07-08 07:46:03

+0

是的,將整個路徑提供給目錄是個好主意,所以你不必猜測* current *目錄是什麼。我給出了兩個例子,一個是linux路徑,一個是windows路徑。 – 2012-07-08 07:46:57

+0

再次感謝!我應該在哪一部分程序中編寫目錄的路徑? (對不起,dystroy,我是新的Java語言) – 2012-07-08 07:50:07

0
public static void main(String[] args) { 
    ... 
     Scanner file = new Scanner(new File(args[0])); 

它正在尋找運行它時所傳遞的第一個參數,它是單詞文件。您需要將其運行爲:

java SortingAnalysis wordsfile.txt 
+0

謝謝,安迪雷!我是新的Java,我很抱歉,但我怎麼能運行它爲 java SortingAnalysis wordsfile.txt? – 2012-07-08 07:47:20

相關問題