2015-04-29 80 views
-2

我的代碼總是拋出一個異常java.lang.String.charAtJava代碼保持在此行中我的代碼拋出異常

while(0 == charToInt(value.charAt(startValueAt))){

代碼段

private static ArrayList<Integer> stringToArray(String value){ 


    ArrayList<Integer> holder = new ArrayList<Integer>(); 


    int startValueAt = 0; 



    if(value.charAt(0)=='-'|| value.charAt(0)=='+') 

     startValueAt= 1; 

    else 

     startValueAt = 0; 


    while(0 == charToInt(value.charAt(startValueAt))){ 


     startValueAt++; 


    } 


    int startOfValue = value.length() - (startValueAt - 1); 


    //to make sure that arraylist is right size and last element ends up at zero as well as find starting index of j with above step 

    //we use value of startValueAt 

    for(int i = startOfValue, j = startValueAt; j <= value.length() - 1; i--, j++){ 



     holder.add(0, charToInt(value.charAt(j))); 

    } 


    return holder; 

} 

這裏是堆棧跟蹤:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String  index out of range: 4 
at java.lang.String.charAt(String.java:686) 
at BigInt.stringToArray(BigInt.java:145) 
at BigInt.<init>(BigInt.java:35) 
at BigInt.multiplyBySingleDigit(BigInt.java:853) 
at BigInt.multiplyPositives(BigInt.java:878) 
at BigInt.multiplyOneNegative(BigInt.java:920) 
at BigInt.multiply(BigInt.java:778) 
at BigInt_Add_Sub_Mul_Div_Mod_Demo.main(BigInt_Add_Sub_Mul_Div_Mod_Demo.java:164) 
+0

什麼是'charToInt()'?這是你寫在其他地方的方法嗎? – CubeJockey

+0

你看到什麼錯誤?你能發佈完整的堆棧跟蹤嗎? –

+0

線程「main」中的異常java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:4 \t at java.lang.String.charAt(String.java:686) \t at BigInt.stringToArray(BigInt.java:145) \t在BigInt有。 (BigInt.java:35) \t在BigInt.multiplyBySingleDigit(BigInt.java:853) \t在BigInt.multiplyPositives(BigInt.java:878) \t在BigInt.multiplyOneNegative(BigInt.java:920) \t在BigInt.multiply(BigInt有。java:778) \t at BigInt_Add_Sub_Mul_Div_Mod_Demo.main(BigInt_Add_Sub_Mul_Div_Mod_Demo.java:164) – Rocketsm46

回答

0
while(startValueAt < value.length() && 0 == charToInt(value.charAt(startValueAt))){ 
    startValueAt++; 
} 

你忽略其中String是所有0 S上的情況。然後,你會打電話給value.charAt(value.length())會拋出異常。

0

使用字符串「321」,由最後for循環變量「J」設置爲startValueAt並理應指向最後一個整數,即「1」。換句話說,'+321'中的第4個字符。但是,然後你增加'j'(用j ++)並嘗試在數組中找到它。這會給你一個超出界限的例外。

+0

所以我應該在for循環中添加j <4這樣的東西,或者我應該爲循環做一個單獨的操作,對不起,我是新來的java。還是有更好的方式告訴它一旦達到最大值就停止,因爲無論我如何更改代碼,我都會得到更多的異常。 – Rocketsm46

+0

我不確定我和j是什麼點,但爲什麼不清理通過類似'value = value.replace(「+」,「」)''傳入的原始值,那麼你有一個字符串只有數字。你的for循環只需要我從0開始,小於'value.length' – Vic

0

而(0 == charToInt(value.charAt(startValueAt))){

startValueAt++; 

如果(startValueAt> = value.length())中斷;/*加入這一行*/

} 
0

(1)你必須確保value至少包含一個數字,是不爲0(否則,你的while循環將繼續下去,直到它想從得到一個char value是出界的/不存在)

試圖解決這個問題,可能會改變你的while循環這樣的:

while(startValueAt < value.length() && 0 == charToInt(value.charAt(startValueAt))){ 
    startValueAt++; 
} 

(2)在你的for循環:

for(int i = startOfValue, j = startValueAt; j <= value.length() - 1; i--, j++){ 
    holder.add(0, charToInt(value.charAt(j))); 
} 

可變j遞增,直到它等於value.length()。問題是,如果你的字符串有4個字符,您可以訪問使用string.charAt(3)的最後一個字符。

問題應該通過簡單地改變j <= value.length()j < value.length()固定。

請記住,數組和列表總是從索引0開始。

相關問題