【问题标题】:Why is my string index out of bounds sometimes?为什么我的字符串索引有时会超出范围?
【发布时间】:2014-03-30 05:45:06
【问题描述】:

类 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 线程“主”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)

我不明白它有时是如何越界的。有什么帮助吗?

【问题讨论】:

  • 如果字符串的长度为 5,那么您可以访问的索引从 0 到 4。5 超出范围。
  • 那么我该如何解决这个问题?
  • 确保 CS2004.UI 生成的数字是 0、1、2、3 或 4。我想您可能需要这样做 CS2004.UI(0,n-1);
  • 我刚刚完成了 n-1,非常感谢!

标签: java string exception boundary


【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多