【问题标题】:How do I make this function return the value I'm looking for?如何让这个函数返回我正在寻找的值?
【发布时间】:2020-03-21 00:19:06
【问题描述】:

我创建了一个函数,用于递归计算函数中特定字符的数量。

public static int countCharInString(String s, char c)
    {

        return countCharInString(s, c, 0);


    }


    public static int countCharInString(String s, char c, int index)
    {
        if(index==s.length())
        {
            return 0;
        }
        if(s.charAt(index) == c)
        {
            return 1 + countCharInString(s, c, index+1);
        }
        if(s.charAt(index)!=c)
        {
            return countCharInString(s, c, index+1);
        }

    }

如何在函数末尾添加一个 return 语句,以返回我在函数内“计数”的整数?

【问题讨论】:

  • 第一种方法的意义何在?
  • 还有——为什么要使用递归?这是要求吗?
  • @sleepToken 是的,它是递归练习的一部分。我知道内存方面比循环运行更糟糕,但这是练习的一部分。
  • @sleepToken 第一个函数只接收一个字符串和一个字符,我需要第二个函数在其输入中添加一个索引。有没有办法只用一个功能?
  • @YonatanRafaely 您可以在一个函数中执行此操作,如果不是传入索引,而是使用substring() 从后续调用中删除您已经检查过的字符。

标签: java if-statement recursion return


【解决方案1】:

您不需要在方法末尾额外的 return 语句,您得到的错误是因为编译器不相信您已经涵盖了所有情况。

最简单的解决方法是简单地将您与c 的第二个比较替换为else。要么字符等于c,要么不等于,您不需要单独检查。

例如

public static int countCharInString(String s, char c, int index) {
    if (index == s.length()) {
        return 0;
    }
    if (s.charAt(index) == c) {
        return 1 + countCharInString(s, c, index + 1);
    } else {
        return countCharInString(s, c, index + 1);
    }
}

【讨论】:

  • 这就是我收到编译错误的原因。谢谢!
【解决方案2】:

我会使用 for 循环,如果需要递归,请检查是否 索引+1 > s.length() 如果是这种情况,递归应该返回

【讨论】:

    【解决方案3】:

    您需要有一个参数来跟踪您的运行总数。向您的函数添加一个参数,每次找到该字符时都会增加该参数。然后返回那个数字而不是返回 0

    【讨论】:

    • 我通常会使用 for 循环而不是递归,但在这种情况下,我必须在递归中进行锻炼。感谢您的意见!
    【解决方案4】:

    在这里使用递归对我来说没有意义。字符串中的字符数将是 `s.length()'。

    但是,由于这是您的要求 - 我相信您想要一些字符的计数 - 我认为这是一个经典的“重新发明”轮子程序。虽然我不喜欢这些,但重要的是要了解正在发生的事情。

    首先,您不需要索引变量...因为您总是将其设置为 0。所以只需使用 0。

    其次,让我们使用substring,这样我们就不必转换为字符并处理字符/字符串比较等。

    public static int countCharInString(String s, String c) {
      // This will only happen when the string is empty to begin with, our we're done with recursion. Since we add this to another number in recursion - it works for our purpose
      if (s.length() == 0) {
        return 0;
      }
    
      // If we have a match, increment add add to our recursive sum
      if ((s.substring(0, 1).equals(c))) {
        return 1 + countCharInString(s.substring(1), c);
      }
    
      // do the final return and invoke recursion
      return countCharInString(s.substring(1), c);
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 2017-09-19
      • 1970-01-01
      • 2021-05-12
      • 2018-08-10
      • 1970-01-01
      • 2023-02-10
      相关资源
      最近更新 更多