2013-04-21 76 views
-2

當我運行下面給出的代碼時,出現以下消息。這意味着什麼?在這種情況下如何克服它?Java程序中的異常

異常線程 「main」 java.lang.ArrayIndexOutOfBoundsException:0 在ifDemo.main(ifDemo.java:5)

public class ifDemo { 
public static void main (String [] args) 

{ 
    int x= Integer.parseInt(args[0]); 
    double half=0.0; 
    if (x!=0) 
    { 
     half=x/2.0; 
     System.out.println(x+ "/2 = "+half); 
    } 
    if (x==0) 
    { 
     System.out.println("The value of x is "+x); 
    } 
    int y=x*5; 
    char grade='F'; 
    if(y>=85) 
    { 
     grade='A'; 
    } 
    if (y>=70 && y<85) 
     grade='C'; 
    System.out.println("y= "+y+ "and grade equal to "+grade); 

    } 
} 

回答

2

運行代碼時,您可能不會傳遞任何值,x可以從arg [0]中獲得值。

運行代碼時傳遞值,這將解決問題。

您是否使用命令行執行它?

+0

我正在通過Eclipse IDE運行它。 – josh 2013-04-21 07:03:20

+0

看看這個[鏈接](http://stackoverflow.com/questions/7574543/how-to-pass-console-arguments-to-application-in-eclipse)。這對你有幫助。 – Maximin 2013-04-21 07:10:55

3

從本質上講,這意味着您要訪問不存在的args數組中的索引。

在你的代碼有:

int x= Integer.parseInt(args[0]); 

而這個錯誤是抱怨,你居然沒有在你的args數組的索引0,即數組爲空。

爲了解決這個問題,你需要在它運行通過你的程序的命令行參數,換句話說,運行它的Java ifDemo 某個整數這裏

對於進一步的閱讀嘗試this,也是谷歌是你的朋友

1
int x= Integer.parseInt(args[0]); 

在上面的那一行中,假設它至少有一個元素,那麼您將索引到一個數組中。你確定它有一個元素嗎?你打電話給你的Java程序並傳入一個數字嗎?

2

當你從你忘記加一個參數爲這樣的命令行運行的程序:

java ifDemo.class 1

所以基本上變量args包含絕對沒有。因此,當您嘗試獲得args[0]的值時,它會拋出ArrayIndexOutOfBoundsException。你可以閱讀更多關於它here

您可以添加的是驗證的一種形式,用於檢查用戶是否輸入了數字,如果他們沒有輸入數字,則會告訴他們。該代碼會是這個樣子:

if(args == null || args.length == 0) { 
    System.out.println("Please enter a number as a command line argument."); 
    System.exit(0); 
} 

或者你可以考慮讓input from the console和使用do while loop對於該驗證。如果你想要一個代碼示例,請讓我知道!

1

int x = Integer.parseInt(args [0]);

這試圖讀取第一個命令行參數。 它會失敗,你沒有描述的例外。

您應該更新程序並檢查命令行參數並在錯誤消息中添加錯誤消息。

1

運行它爲java ifDemo xxx其中xxx是一些整數。

args是一個字符串數組,它被稱爲Command line arguments。所以,如果你從命令行java ifDemo 10 12運行您的程序,然後ARGS將包含[10,12]args[0]將是10,args[1]將是12和args.length將2

此行拋出一個錯誤,因爲你沒有運行帶有命令行參數的程序。

int x= Integer.parseInt(args[0]); 

args是空的,你是在試圖訪問拋出,指示數組已經用非法索引訪問引起ArrayIndexOutOfBoundsException陣列,的第1個要素。索引或者是負數,或者大於或等於數組的大小。

2

如果您嘗試在命令提示符下運行該程序,請務必提供命令行參數。我試着運行該程序並沒有發生錯誤。

screenshot

1

您還沒有傳遞的整數作爲命令行參數int x= Integer.parseInt(args[0]);

ARGS [0]被指定由命令行arguement的值。

javac ifDemo.java 

java ifDemo 23 

當運行程序,ARGS [0]是23,

早些時候如你沒有提供由命令行任何參數,所以ARGS:在下列方式

編譯和運行程序[0]沒有設置,你得到一個陣列超出外部例外