在java中使用递归查找字符串中存在的单词的数目

wz3gfoph  于 2023-01-01  发布在  Java
关注(0)|答案(2)|浏览(106)

类words定义了一个递归函数来执行与字符串相关的操作。下面给出了该类的详细信息:

Class name : words
Data members/instance variables
 text : to store string.
 w : integer variable to store total words.
Member functions/methods
 words( ) : constructor to store blank to string and 0 to integer data.
 void Accept( ) : to read a sentence in text. Note that the sentence may contain more
 than one blank space between words.
 int FindWords(int) : to count total number of words present in text using Recursive
 Technique and store in ‘w’ and return.
 void Result( ) : to display the original string. Print total number of words stored in
 ‘w’ by invoking the recursive function.

我试过这个密码

public static int CountWords(String str) {
    int c = 0;
    int i = str.indexOf(" ");
    if (str.isEmpty()) {
        return 0;
    }else 
        if (i == str.indexOf(" ")) {
      return c++;
   }
  //str.substring(0,str.indexOf(" ")-1);
    c++;
    return c + CountWords(str.substring(i + 1));
}

但是我需要返回一个整数值,我对此感到困惑。

f2uvfpb9

f2uvfpb91#

在您的代码中,最后一个return语句不可访问。原因:在这两种情况下,你都放置了if-else块和put return,所以函数实际上是从if-else块本身返回的(在else中,if的条件总是true,因为你赋值了str.indexOf(““))。
我已经根据你上面的问题写下了代码...

public int findWords(int i){
    if(i > text.lastIndexOf(" "))
        return 1;
    i = text.substring(i).indexOf(" ") + i;
    if(i < 0)
        return 1;
    if(text.substring(i).equals(null))
        return 0;
    return( findWords(i+1) + 1);
}

希望你觉得它工作得很好。

beq87vna

beq87vna2#

你的函数已经返回了一个整数,它碰巧总是0。

else if (i == str.indexOf(" ")) {
  return c++;
}

始终为true,并且c只在return语句传递后更新,这是因为已经将i设置为indexOf(““),并且使用int实现了增量,另外,记住这里需要将单词数增加2,因为函数在两个单词之间结束。
因此,请改用以下命令:

else if (i == str.lastIndexOf(" ")) {
  return c+2;
}

您应该看到,现在函数返回了正确的字数。

相关问题