java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:10 --- .length()循环

时间:2013-12-18 14:12:39

标签: java for-loop

大家好,我的代码是

    for (int i = 0; i <= alignedSeqA.length(); i++) {


            if(alignedSeqA.charAt(i)==alignedSeqB.charAt(i)) {

                alignedSeqPenalty +="0";  
            }
            else if(alignedSeqA.charAt(i)=='-'){
                alignedSeqPenalty +="2";


            }else if(alignedSeqB.charAt(i)=='-'){

                alignedSeqPenalty +="2";

            }else if(alignedSeqA.charAt(i)!=alignedSeqB.charAt(i)){

                alignedSeqPenalty +="1";

            }

            }

这是我的错误

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 10
    at java.lang.String.charAt(Unknown Source)
    at New.main(New.java:124)

当我用alignedSeqA.length()(如7)更改我的integer时,它工作得很好

即。 - &GT;当我将其更改为7 20100201

时输出

我做错了什么?

谢谢

3 个答案:

答案 0 :(得分:2)

您需要使用:

for (int i = 0; i < alignedSeqA.length(); i++) {

第一个索引是0,最后一个是alignedSeqA.length() - 1

答案 1 :(得分:1)

在Java(和大多数编程语言)中,数组从零开始

i <= alignedSeqA.length() 

应该是

i < alignedSeqA.length()
  ↑

意味着如果您有一个大小为N的数组,则索引将从0N - 1(总和将为N)。

为了更好地解释它,让我们举一个具体的例子。假设alignedSeqA大小为5,它看起来像这样:

  0   1   2   3   4
+-------------------+
|   |   |   |   |   |
+-------------------+

因此,如果你循环直到(包括)大小(即5),你就会超出界限。

答案 2 :(得分:0)

问题在于:

  i <= alignedSeqA.length();
     |
Remove this `=` from the for loop condition

应该是这样的:

i < alignedSeqA.length();