java - 为什么我的字符串索引有时会超出范围?

标签 java string exception boundary

实验室9类

        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 在 java.lang.String.charAt(String.java:658) at ScalesSolution.SmallChange(ScalesSolution.java:15)//指向 if (scasol.charAt(p) == '0') 在 Lab9.main(Lab9.java:9)

我不明白为什么有时它会超出范围。请问有什么帮助吗?

最佳答案

索引的数字从 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);

关于java - 为什么我的字符串索引有时会超出范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22057627/

相关文章:

string - 在常量字符串上应用 bash 字符串运算符

java - JDBC 和 SQLException

javax.naming.NameNotFoundException :while trying to lookup

python - 具有不同包含路径的自定义 Python 异常

java - 使用 Java 对 Active Directory 进行 NTLM 身份验证

java - 工厂方法模式—— 'Creator'类应该什么时候实现工厂方法?

java - 使用 OpenGL 在 Android 中交叉淡入淡出场景

java - 无法使用 mongo 和 mongojack 反序列化 localdatetime

c++ - 使用QT进程使用命令行从笔记本电脑获取传感器信息

Java - 从 unicode 转换为字符串?