防止循环继续超出string1或string2的长度

时间:2016-05-12 13:51:31

标签: java for-loop

在下面的代码中,我在比较字符串的相似性时会遇到以下错误。

  

字符串索引超出范围: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;
          }
   }

2 个答案:

答案 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;
   }
}

http://ideone.com/7zHoV4

答案 1 :(得分:0)

只需将代码更改为

即可
if (i >= answer.length())
    break;

因为Java中的字符串从0开始。所以,至少它应该是length - 1