为什么我的字符串索引有时会超出界限?

Adz*_*Adz 0 java string exception boundary

Class Lab9

        ScalesSolution s = new ScalesSolution("00100");
        s.println();
        s.SmallChange();
        s.println();
Run Code Online (Sandbox Code Playgroud)

方法ScalesSolution类中的SmallChange

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();
}
Run Code Online (Sandbox Code Playgroud)

多次运行代码后,我有时会收到错误

"String index out of range 5"
Run Code Online (Sandbox Code Playgroud)

即使这打印出来

  The length of scasol is 5
Run Code Online (Sandbox Code Playgroud)

每次运行

错误:00100 scasol的长度为5线程"main"中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:在ScalesSolution.SmallChange(ScalesSolution)的java.lang.String.charAt(String.java:658)处为5. java:15)//指向Lab9.main上的if(scasol.charAt(p)=='0')(Lab9.java:9)

我不明白它有时会超出范围.有什么帮助吗?

Szy*_*mon 5

索引的编号从0开始,因此如果下面的代码生成介于0和5之间的数字,则对于具有5个字符的字符串(仅索引0到4将起作用)将不起作用.

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

改为

int p = CS2004.UI(0,n-1);
Run Code Online (Sandbox Code Playgroud)