2012-10-20 128 views
1

我正在使用String.split()一個分數計算器讓分裂的條款。輸入由空格分隔(1/2/1/2)的ArrayIndexOutOfBounds

String[] toReturn = new String[6]; 
result = isInputValid(expression); 

toReturn = splitExpression(expression, placeToSplit[0]); 
int indexOfUnderscore = toReturn[0].indexOf("_"); 
result = isInputValid(toReturn[0]); 

if(toReturn[5] != null){ 
    getOperator2(toReturn); 
} 

錯誤在if語句中。 toReturn[5]是出界,因爲當兩個詞或更少進行了解答分裂的表達,它使用String.split()它在空間分割,不會產生toReturn[5],甚至當我設定值toReturn[5]。如果有一種方式來告訴我們,如果陣列中的一個字段存在,這可以解決這個問題,或者如果有辦法告訴多少項正在落實,我的程序適用於1/2 + 1/2 * 1/2,但我還沒有想出如何以確定是否存在toReturn[5]

回答

5

正確:

result = isInputValid(expression); 

String[] toReturn = splitExpression(expression, placeToSplit[0]); 
int indexOfUnderscore = toReturn[0].indexOf("_"); 
result = isInputValid(toReturn[0]); 

if(toReturn.length>5 && !"".equals(toReturn[5])){ 
    getOperator2(toReturn); 
} 

toReturn.length>5部分驗證所述陣列本身是至少6個項目長。然後,你可以檢查該元素是empty或不...

+1

不能爲null,但可能是的String.Empty –

+0

@FrancisP你」對了!我應該睡一覺:) – ppeterka

+1

也刪除'String [] toReturn = new String [6]; '和更新'字符串[] toReturn = splitExpression(表達式,placeToSplit [0]);' – Jimmy

0

這是它應該是什麼樣子。 刪除第一線,String[] toReturn = new String[6];

更新您的第三行,

String[] toReturn = splitExpression(expression, placeToSplit[0]); 

並檢查此條件:

if(toReturn.length>5){ // use !toReturn[5].isEmpty() to check the empty string 
    getOperator2(toReturn);   
    }