2014-02-27 68 views
0

類Lab9爲什麼我的字符串索引有時會出界?

 ScalesSolution s = new ScalesSolution("00100"); 
     s.println(); 
     s.SmallChange(); 
     s.println(); 

方法SmallChange在ScalesSolution類

public void SmallChange() { 

    int n = scasol.length(); 
    System.out.println("The length of scasol is "+ n); 
    //CS2004 method generates a random integer number between 0 and n 
    int p = CS2004.UI(0,n); 

    StringBuilder sb = new StringBuilder(scasol); 
    if (scasol.charAt(p) == '0') { 
     sb.setCharAt(p, '1'); 
    } else { 
     sb.setCharAt(p, '0'); 
    } 
    scasol = sb.toString(); 
} 

運行代碼多次後,我有時會收到錯誤

"String index out of range 5" 

即使這種打印出

The length of scasol is 5 

每次運行時間

錯誤: scasol的長度爲5 異常在線程「主」 java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:5 在java.lang.String中.charAt(String.java:658) 在ScalesSolution.SmallChange(ScalesSolution.java:15)//指向如果(scasol.charAt(p)== '0') 在Lab9.main(Lab9.java:9 )

我不明白它會出界如何的時候。請幫忙嗎?

+4

如果字符串的長度是5,那麼你可以在它進入指數從0至4。5去是出界。 – Ghostkeeper

+0

那麼我該如何解決這個問題? – Adz

+1

確保'CS2004.UI'生成一個號碼是0,1,2,3或4。我想你可能需要做'CS2004.UI(0,N-1);' – Ghostkeeper

回答

5

指數人數從0開始,因此,如果下面的代碼生成0和5之間的數字,它不會爲一個字符串工作有5個字符(只有索引0到4將起作用)。

//CS2004 method generates a random integer number between 0 and n 
int p = CS2004.UI(0,n); 

改變,要

int p = CS2004.UI(0,n-1); 
2

字符串以數組索引0開始。長度爲5的字符串具有索引0,1,2,3,4。通過從scasol.charAt(p) == '0'讀取第5個索引,您正在讀取部分字符串的界限。

爲了解決這個問題,只是賺了指數值低1:scasol.charAt(p-1) == '0'

相關問題