Class Lab9
ScalesSolution s = new ScalesSolution("00100");
s.println();
s.SmallChange();
s.println();
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();
}
多次运行代码后,我有时会收到错误
"String index out of range 5"
即使打印出来
The length of scasol is 5
每次运行
错误: 00100 scasol的长度是5 线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:5 at java.lang.String.charAt(String.java:658) 在ScalesSolution.SmallChange(ScalesSolution.java:15)//指向if(scasol.charAt(p)=='0') 在Lab9.main(Lab9.java:9)
我不明白它有时会超出范围。有什么帮助吗?
答案 0 :(得分: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);
答案 1 :(得分:2)
字符串以数组索引0开头。长度为5的字符串的索引为0,1,2,3,4。从第5个索引读取scasol.charAt(p) == '0'
,您正在读取字符串的一部分那是出界的。
要解决此问题,只需将索引值1降低:scasol.charAt(p-1) == '0'