-4

编写一个递归的布尔值方法 containsVowel,它接受一个字符串,如果字符串包含元音则返回 true。字符串包含元音,如果:错误,它没有提供帮助。
请帮助我纠正错误,谢谢。

boolean containsVowel(String s)
{ 
    if(s.containsVowel("aeiouAEIOU")) 
    {
        return true;
    }
    else 
    {
        (s.substring(!=));
        return false
    }
}

编译器错误

代码实验室分析

备注:你好像编译有错误

这是我之前提出的另一个问题:

编写一个递归的 int 值方法 len,它接受一个字符串并返回字符串中的字符数。字符串的长度为:如果字符串是空字符串 (""),则为 0。1 比第一个字符以外的其余字符串的长度多。

这是我的编程实验室正在寻找的答案:

int len(String s)
{
if(s.equals("")){
    return 0;
}
 else {
return (1+len(s.substring(1)));}
}
4

4 回答 4

11

这段代码有一些问题。

  1. s.containsVowel. s是一个字符串,而 Java 字符串没有containsVowel方法。你应该调用你自己的containsVowel方法,而不是那个 String 一个(不存在)。

  2. 如果您进行更改,这将是一种无限递归方法,因为您没有“基本情况”。一个让它退出的案例。

  3. (s.substring( !=));不编译。我不知道你甚至想在这里做什么。

  4. return false不以分号结尾。如果您希望编译代码,则需要它。

这是你应该用伪代码处理这个算法的方法

containsVowel(String input)
    if (empty(input)) return false  //the base case
    char firstChar = getFirstCharOf(input)
    return firstChar.isAnyOf("vowelCharacters") || containsVowel(inputWithoutFirstChar(input))
于 2013-05-23T23:05:08.707 回答
3

让我们扔掉这段代码,从基本原则开始。(我对您拥有的代码的一个评论是,程序必须完全按照语言期望的方式编写 - 程序不是读心者,它们不知道您想要什么,它们只知道您输入的内容,(s.substring(!=));诸如此类100% 毫无意义,即使它在你的脑海中完全有道理。)


递归方法的思想是它有一个基本情况和一个重复条件。

containsVowel 的基本情况是空字符串,“” - 返回 false。

重复条件是如果当前字符不是元音,我们返回 true,否则我们调用 containsVowel,字符串短一个字符。这样,每个字符都会被检查,直到我们找到一个元音,如果我们用完了字符(基本情况),我们就会中止。

您可以通过查看s.charAt(0)和使用indexOf来检查当前字符是否为元音,以查看它是否包含在"aeiouAEIOU".

您可以通过以下方式将自己称为较短的字符串(这会从第二个字符开始return containsVowel(s.substring(1));创建一个字符串,例如较短的一个)s

您现在可以看到如何编写方法了吗?

于 2013-05-23T23:07:31.043 回答
0

java中的行以分号结尾。你好像少了一个。

return false
于 2013-05-23T23:03:40.710 回答
0
  • containsVowel()不是String的有效方法。
  • 语句以分号结尾(所以return false变成return false;
  • s.substring(!=)是一个语法错误,因为!=它不是一个有效的符号。
  • s.substring()创建一个新的String,并且您没有在任何变量中捕获该结果(当然是在更正的符号之后)。

有一种更简单的方法可以破译字符串是否有元音 - 它涉及正则表达式,您要检查的元音集(单词 fly 呢?),并且可以使用图形正则表达式检查器进行验证。我将把这部分作为练习留给读者。

于 2013-05-23T23:08:14.643 回答