大家好,我的代码是
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
时输出我做错了什么?
谢谢
答案 0 :(得分:2)
您需要使用:
for (int i = 0; i < alignedSeqA.length(); i++) {
第一个索引是0
,最后一个是alignedSeqA.length() - 1
答案 1 :(得分:1)
在Java(和大多数编程语言)中,数组从零开始。
i <= alignedSeqA.length()
应该是
i < alignedSeqA.length()
↑
意味着如果您有一个大小为N
的数组,则索引将从0
到N - 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();