2012-12-09 57 views
0

我試圖使該構建使用根據參數的數量不同的構造類(電話簿)的新對象的方法,,但它提供了一個錯誤使用方法,該方法採取可變數量的參數

(例外在線程「主要」 java.lang.ArrayIndexOutOfBoundsException:0)

public static PhoneBook createObjects(String fName,String lName,String num,String...optional) 
{ 
    n++;  
    if (optional[0]==null) 
     ArrayOfObjects[n]=new PhoneBook(fName,lName,num); 
    else if (optional[1]==null) 
     ArrayOfObjects[n]=new PhoneBook(fName,lName,num,optional[0]); 

    return ArrayOfObjects[n]; 
} 
+2

什麼是ArrayOfObjects? – OmniOwl

+0

@Vipar可能是OP代碼中其他地方聲明的PhoneBook數組(與問題無關)? –

+0

@Vipar實際上我用0開始n,但爲什麼這個數組從不取值? –

回答

3

不是檢查是否optional[0] == null,你應該檢查optional.length,以確定是否可選參數存在。

optional[1]也是如此。

0

而不是檢查optional[0]optional[1]在這裏,你應該檢查到optional.length。另外,請記住,optional本身可能是null,所以像:

if(optional != null) { 
    if(optional.length > 0) { 
     // I now know that optional has at least one element in it, and optional[0] should be valid, though I don't know that it is non-null. 
     if(optional.length > 1) { 
      // I now know that optional[1] is valid, though I do not know it is non-null. 
     } 
    } 
} 

如果您需要非空:

if(optional.length > 0 && optional[0] != null) 

第二部分,optional[0] != null纔會被調用,如果第一評估爲真。