【问题标题】:Java= arbitrary placement of if statement gives different output? [duplicate]Java= if 语句的任意位置给出不同的输出? [复制]
【发布时间】:2015-10-29 14:44:12
【问题描述】:

我正在 CodingBat 中玩 Java 字符串热身。

提示是:

给定一个字符串,返回一个长度为 2 的子字符串在字符串中出现的次数,并且作为字符串的最后 2 个字符,所以 "hixxxhi" 产生 1(我们不会计算结束子字符串)。

last2("hixxhi") → 1

last2("xaxxaxaxx") → 1

last2("axaxaaxx") → 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 语句被忽略。

但是,只需将 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;

  }

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

【问题讨论】:

    标签: java string if-statement


    【解决方案1】:

    在你的第一个sn-p中String last = str.substring(str.length()-2);会在str.length &lt; 2时抛出异常,所以if语句根本没有被执行。

    在您的第二个 sn-p 中,您将 if 语句放置在正确的位置。

    【讨论】:

    • 哦,呵呵。你会在 12 分钟内得到答案 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多