Java = if语句的任意放置给出不同的输出?

时间:2015-10-29 14:44:13

标签: java string if-statement

我正在使用Java Strings热身在CodingBat中闲逛。

提示符是:

给定一个字符串,返回字符串长度2出现在字符串中的次数以及字符串的最后2个字符的数量,所以" hixxxhi"产量1(我们不会计算最终子字符串)。

last2(" hixxhi")→1

last2(" xaxxaxaxx")→1

last2(" axxxaaxx")→2

我的第一次尝试是:

public int last2(String str) {

   String last = str.substring(str.length()-2);
   int count = 0;

   if (str.length() < 2){
      return 0;
   }


   for (int i = 0; i <str.length()-2; i++){
      String sub = str.substring(i,i+2);

      if (sub.equals(last)){
         count++;
      }
    }

return count;

}

此代码为所有测试生成了正确的输出,除非输入字符串的长度小于2(输出= Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: -1 (line number:3)等),这意味着忽略了if语句。

enter image description here

但是,只需将if语句移到方法开头的变量声明之上,就可以使代码正确地传递所有测试(甚至长度小于2的字符串):

public int last2(String str) {

   if (str.length() < 2){
     return 0;
   }

  String last = str.substring(str.length()-2);
  int count = 0;

  for (int i = 0; i <str.length()-2; i++){
      String sub = str.substring(i,i+2);

      if (sub.equals(last)){
        count++;
       }
    }

    return count;

  }

Output for attempt 1

我觉得变量声明不应该对if语句的功能产生任何影响......是什么让我的第一次编码尝试无法工作?

1 个答案:

答案 0 :(得分:3)

在您的第一个代码段String last = str.substring(str.length()-2);中,str.length < 2会抛出异常,因此if语句根本没有执行。

在第二个片段中,您将if语句放在正确的位置。