在下面的代码中,我在比较字符串的相似性时会遇到以下错误。
字符串索引超出范围:1(其中1是输入长度)
似乎如果输入小于答案的长度,则会导致此错误。但是,每当我尝试添加if语句以断开循环时,如果我增加高于输入的长度,它仍然会抛出此错误。
String answer = textArea.getText().toLowerCase();
for (int i = 0; i < finalWord.length(); i++)
{
if (i > answer.length())
break;
else if (finalWord.contains(answer.charAt(i) + ""))
{
likeness += 1;
}
}
答案 0 :(得分:4)
如果循环应该继续,只需在for comparisan中添加您的比较。 如果循环小于最终单词并且更小并且回答,则循环应该继续。如果其中任何一个为假,则循环不应继续。
这是由&&
AND运算符实现的。方程的两边都必须为真,以便循环能够继续。
这是你想要for循环的比较
if(i < finalWord.length() && i < answer.length() ) {
i++
}
在您的代码中,它看起来像这样:
String answer = textArea.getText().toLowerCase();
for (int i = 0; i < finalWord.length() && i < answer.length() ; i++) {
if (finalWord.contains(answer.charAt(i) + "")) {
likeness += 1;
}
}
只是为了踢,一个稍微更优化的版本,通过将字符串长度存储在局部变量中,可以节省长度检查中函数调用的开销。
String answer = textArea.getText().toLowerCase();
for (int i = 0,
fwl=finalWord.length(),
al=answer.length();
i < fwl && i < al ;
i++) {
if (finalWord.contains(answer.charAt(i) + "")) {
likeness += 1;
}
}
答案 1 :(得分:0)
只需将代码更改为
即可if (i >= answer.length())
break;
因为Java中的字符串从0开始。所以,至少它应该是length - 1
。