【问题标题】:For with if statement java对于 with if 语句 java
【发布时间】:2011-06-13 07:50:32
【问题描述】:

我需要检查 char c 索引在 string 上的位置,如果 char c 不存在 - 返回 -1。

public class Find {
    private String _st;
    int i;

    public Find(String st) {
        _st = st;
    }

    public int whatIstheIndex(char c) {
        for (i=0;i<_st.length();i++)
            if (_st.charAt(i) == c) {
                return i;
            } else {
                return -1;
            }
        return i;
    }
}

我总是得到-1。为什么?最后一个return i;是不是没必要?

【问题讨论】:

  • 我以 Eclipse 将自动执行的格式一致地重新缩进了您的代码。如果您查看它,您现在可以看到循环中的两个返回之间是如何进行二元选择的。猜猜它第一次通过循环做什么?

标签: java arrays if-statement for-loop


【解决方案1】:

删除 else 子句,如果字符串中的第一个字符不正确,则返回 -1。

然后,您还需要更改方法末尾的 return 语句。

【讨论】:

    【解决方案2】:

    为什么不直接使用内置的indexOf 方法呢?这将比遍历字符串并测试每个字符更容易和更快。

    但是如果你因为一些奇怪的原因不得不使用这个方法,去掉你的else子句,因为它使函数在每次测试的字符不匹配时返回-1。

    【讨论】:

      【解决方案3】:

      这是另一种可行的解决方案。

      public int whatIstheIndex(char c) {
          int result = -1;
          for (int i = 0; i < _st.length(); i++) {
              if (_st.charAt(i) == c) {
                  result = i;
              } 
          }
          return result;
      }
      

      这只是思考问题的不同方式。我想它稍微“更糟”了,因为它增加了一行额外的代码,但我希望你能看到它是如何/为什么起作用的。

      【讨论】:

      • 我认为这个问题也可以,至少在我看来。为你 +1。
      【解决方案4】:

      你的代码应该是这样的:

      public int whatIstheIndex(char c) {
      
              for (int i = 0; i < _st.length(); i++)
      
                  if (_st.charAt(i) == c) {
                      return i;
                  } 
      
              return -1;
      
          }
      

      希望这会有所帮助!

      【讨论】:

      • @Bside:你明白为什么这是你应该写的吗?
      • 说实话?发布此问题 10 秒后,我成功理解了问题所在。 @Sandeep Jindal 写的正是我所理解的。
      • 现在我正在尝试理解 indexOf(string str) :) ..in 老实说 (2) .. 我正在努力学习测试.. 我想做那个作业,但没有必须。我只想明白。
      • 太棒了...我在 Stacoverflow 上发布了问题 - 并且在第二次之后就明白了。我也了解 indexOf(string str)。
      • 这叫‘橡皮鸭调试’(en.wikipedia.org/wiki/Rubber_duck_debugging)
      【解决方案5】:

      为什么不使用String.indexOf(int) 方法。

      public  int whatIstheIndex (char c) {
          return _st.indexOf(c);
      }
      

      否则,仅在循环结束后返回 -1:

      public  int whatIstheIndex (char c) {
      
          for (i=0;i<_st.length();i++)
      
              if (_st.charAt(i) == c )  {
                 return i;
              }
          }
      
          return -1;
      }
      

      【讨论】:

      • 因为我需要通过一些有限的选择来做到这一点......无论如何,谢谢
      【解决方案6】:

      发生的情况是它正在查看第一个字符,如果不匹配,它会立即返回 -1(因此,在找到正确的字符之前不会继续循环遍历字符)。

      只有在完成for 循环并且没有找到字符时才需要返回-1。所以它必须是:

      public int whatIstheIndex(char c) {
          for (i = 0; i < _st.length(); i++) {
              if (_st.charAt(i) == c) {
                  return i;
              }
          }
          return -1;
      }
      

      【讨论】:

        【解决方案7】:

        你总是在看到第一个字符后返回。您的测试不查看其他角色。调试器会向您展示这一点。最后一个return i只有在长度为0时才会被调用。

        【讨论】:

          【解决方案8】:

          您当前的实现只会返回两个值之一,即 0 或 -1。当第一个索引是字符所在的索引时返回 0,如果在那里没有找到,则返回 -1。删除 else 子句并在完成 for 循环后返回 -1 表示您已穷尽搜索所有索引,但没有找到答案。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-24
            • 1970-01-01
            • 1970-01-01
            • 2018-12-06
            • 2020-02-29
            • 2019-11-14
            • 2011-05-11
            • 2018-08-23
            相关资源
            最近更新 更多