编写一个递归的,布尔值的方法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)));}
}
答案 0 :(得分:11)
此代码中存在一些问题。
s.containsVowel
。 s
是一个String,Java String没有containsVowel
方法。您应该调用自己的containsVowel
方法,而不是字符串1(不存在)。
如果进行了更改,这将是一个无限递归方法,因为您没有“基本情况”。一个让它退出的案例。
(s.substring( !=));
无法编译。我不知道你在这里做什么。
return false
不以分号结尾。如果您希望编译代码,则需要它。
以下是在伪代码中使用此算法的方法
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进行验证。我将把这部分作为练习留给读者。