2014-11-01 94 views
0

你好當我試圖運行此代碼我收到以下錯誤 我明白的時候是沒有的主要功能發生這種情況,但我有一個主要機能的研究..異常在線程「主要」

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 
at FilterAs.main(FilterAs.java:21) 

這裏是我的代碼

import java.io.*; 
public class FilterAs { 
public static int numberOfFiles(File directory) { 
     if (directory.isFile()) 
     return(1); 
     else { 
     File[] list = directory.listFiles(); 

     int count = 0; 

     if (list != null) 
      for (File file : list) 
       count += (file.isFile()) ? 1 : numberOfFiles(file); 

     return(count); 
     } 
    } 

    public static void main(String[] args) { 
     System.out.println(numberOfFiles(new File(args[0]))); 
    } 

} 
+0

好吧,沒有它沒有發生,當你沒有主要功能或沒有。在運行代碼時,你是否將一些參數傳遞給命令行? – user2336315 2014-11-01 11:40:17

+0

打印出args.length的值,你會看到問題。如果args沒有條目,則[0]索引超出範圍。 – Scooter 2014-11-01 11:42:49

回答

0

如果沒有傳遞給程序的任何命令行參數,下面會拋出ArrayIndexOutOfBoundsException因爲args陣列將是空的。

System.out.println(numberOfFiles(new File(args[0]))); 

訪問args陣列之前,您應該檢查這些觀點存在:

if (args.length > 0) { 
    System.out.println(numberOfFiles(new File(args[0]))); 
} else { 
    System.out.println("Please supply a file name"); 
} 
0

你要的電話:

args[0] 

args是空的。

你叫你的程序的東西,如:

java -jar MyJar.jar 

但是你應該有把它稱爲:

java -jar MyJar.jar /a/path/to/some/directory 

即你需要一個參數傳遞給您的應用程序。

1

我猜你忘了爲你的程序設置參數?

調用方法(numberOfFiles)時,您正在訪問參數。

+0

這應該是一個評論 – n00bProgrammer 2014-11-01 11:48:46

+0

對不起,我不知道你的意思? 我很新,只是認爲這是我如何幫助OP? – Gooair 2014-11-01 12:18:18

相關問題