大家好,这是我的密码
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时,它工作得很好
即->当我将其更改为7 20100201时输出
我做错什么了?
谢谢
发布于 2013-12-18 14:13:54
你需要使用:
for (int i = 0; i < alignedSeqA.length(); i++) {因为第一个索引是0,最后是alignedSeqA.length() - 1
发布于 2013-12-18 14:14:16
在Java (和大多数编程语言)中,数组是基于零的.
i <= alignedSeqA.length() 应该是
i < alignedSeqA.length()
↑这意味着,如果您有一个大小为N的数组,则索引将从0到N - 1 (总和将为N)。
为了更好地解释它,让我们举一个具体的例子。假设alignedSeqA大小为5,它看起来如下:
0 1 2 3 4
+-------------------+
| | | | | |
+-------------------+因此,如果循环直到(包括)大小(即5),就超出了界限。
发布于 2013-12-18 14:13:42
问题是:
i <= alignedSeqA.length();
|
Remove this `=` from the for loop condition应该是这样的:
i < alignedSeqA.length();https://stackoverflow.com/questions/20660463
复制相似问题