我的代码有什么问题

时间:2013-05-23 22:59:59

标签: java recursion

编写一个递归的,布尔值的方法containsVowel,它接受一个字符串,如果该字符串包含一个元音,则返回true。  如果符合以下情况,字符串包含元音: 字符串的第一个字符是元音,或 字符串的其余部分(超出第一个字符)包含元音 这是我的编程实验室 以下是我所知道的错误,并没有提供帮助 请帮我纠正错误。谢谢。

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

编译器错误

codelab分析

说明: 你似乎在编译中有错误

这是我之前做过的另一个问题:

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

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

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

4 个答案:

答案 0 :(得分:11)

此代码中存在一些问题。

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

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

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

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

  5. 以下是在伪代码中使用此算法的方法

    containsVowel(String input)
        if (empty(input)) return false  //the base case
        char firstChar = getFirstCharOf(input)
        return firstChar.isAnyOf("vowelCharacters") || containsVowel(inputWithoutFirstChar(input))
    

答案 1 :(得分:3)

让我们抛出这段代码,从基本原则开始。 (我对你所拥有的代码的一句话是,程序必须完整地写出语言是如何编写的 - 程序不是读者的想法,他们不知道你想要什么,他们只知道你输入什么,以及{ {1}} 100%毫无意义,即使它在你的头脑中完全有道理。)


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

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

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

您可以查看(s.substring(!=));并使用s.charAt(0)查看当前字符是否包含在indexOf中来检查当前字符是否为元音。

你可以通过"aeiouAEIOU"(从第二个字符开始创建一个return containsVowel(s.substring(1));字符串,例如一个更短的字符串)来更短的字符串上打字自己

你现在能看到如何编写方法吗?

答案 2 :(得分:0)

java中的行以分号结尾。你似乎错过了一个。

return false

答案 3 :(得分:0)

  • containsVowel()不是String的有效方法。
  • 语句以分号结尾(因此return false变为return false;
  • s.substring(!=)是语法错误,因为!=不是有效符号。
  • s.substring()会创建一个新的String,而您在任何变量中都没有捕获到该结果(当然,在更正后的符号之后)。

如果String有一个元音,有一种更简单的解密方法 - 它涉及正则表达式,你要检查的元音集(飞行单词是什么?),并且可以使用a graphical regex checker进行验证。我将把这部分作为练习留给读者。