Java 我的代码怎么了
编写一个递归的布尔值方法containsVowel,该方法接受字符串,如果字符串包含元音,则返回true。 在以下情况下,字符串包含元音: 字符串的第一个字符是元音,或 字符串的其余部分(第一个字符之外)包含一个元音 这是给我的编程实验室的 以下是我向complier sas提供的信息,其中有一个错误,它不提供帮助。Java 我的代码怎么了,java,recursion,Java,Recursion,编写一个递归的布尔值方法containsVowel,该方法接受字符串,如果字符串包含元音,则返回true。 在以下情况下,字符串包含元音: 字符串的第一个字符是元音,或 字符串的其余部分(第一个字符之外)包含一个元音 这是给我的编程实验室的 以下是我向complier sas提供的信息,其中有一个错误,它不提供帮助。 请帮我纠正错误,谢谢 boolean containsVowel(String s) { if(s.containsVowel("aeiouAEIOU")) {
请帮我纠正错误,谢谢
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)));}
}
java中的行以分号结尾。你好像少了一个
return false
这段代码有一些问题
s.containsVowel
s
是一个字符串,而Java字符串没有containsVowel
方法。您应该调用自己的containsVowel
方法,而不是字符串方法(它不存在)(s.substring(!=)代码>不编译。我不知道你在这里想干什么
返回false
不以分号结尾。如果你想让你的代码编译,它需要containsVowel(String input)
if (empty(input)) return false //the base case
char firstChar = getFirstCharOf(input)
return firstChar.isAnyOf("vowelCharacters") || containsVowel(inputWithoutFirstChar(input))
让我们抛开这段代码,从基本原则开始。(我对你的代码的一点意见是,程序必须按照语言所期望的方式编写——程序不是读心器,它们不知道你想要什么,它们只知道你键入的内容,而像
(s.substring(!=);
这样的东西100%没有意义,即使它在你的头脑中完全有意义。)
递归方法的思想是它有一个基本情况和一个重复条件 containsVowel的基本大小写是空字符串“-return false” 重复条件是,如果当前字符不是元音,我们返回true,否则我们调用containsVowel,字符串短一个字符。这样,每个字符都会被检查,直到我们找到一个元音为止,如果我们用完了字符(基本大小写),我们就会中止 通过查看
s.charAt(0)
并使用indexOf
查看当前字符是否包含在“aeiouAEIOU”
中,可以检查当前字符是否为元音
您可以通过执行returncontainsvowel(s.substring(1)),将自己的字符串缩短一个
(从第二个字符开始创建一个由s
组成的字符串,例如短一个字符)
您现在可以看到如何编写该方法了吗?
不是用于的有效方法containsVowel()
- 语句以分号结尾(因此
变成returnfalse
returnfalse;
是一个语法错误,因为s.substring(!=)
不是有效的符号!=
创建一个新的s.substring()
,您不会在任何变量中捕获该字符串的结果(当然,在更正的符号之后)字符串
如果一个字符串有一个元音,有一种更简单的方法来破译它——它涉及正则表达式,你要检查的元音集(单词fly呢?),并可以使用进行验证。我将把这一部分作为练习留给读者。将代码作为Java虚拟机、JVM进行浏览,您会发现,如果让它编译,它将永远运行。哪种编译器只会说“有错误”?当然,这肯定是有用的。我是我的编程实验室使用Java编译器,而不需要其余的代码。请注意,如果您非常频繁地编译代码(可能只添加1或2行代码),然后在修复当前代码和it编译器之前不添加任何新代码,您的编程风格将受益匪浅iles是正确的。这项技术应该可以帮助您避免出现百出的错误。@Alorva Ex您非常困惑。下载Netbeans并在Netbeans中测试您的代码并不困难,例如,在myprogramminglab.com完全编译并按照您的测试结果运行之前。同样值得注意的是:他的
包含了OWEL
方法不是静态的,所以他要么需要将其声明为静态的,要么在它所属的任何类的实例上调用它。+1表示所有内容,尤其是伪代码(我可能使用“或”而不是|
)+第三点是1。这是我下午做的。这是你在mt编程实验室做不到的。当你使用我的编程实验室时,你跳过所有你用netbeans写的东西,只写实际需要的方法。看上面我的第二个问题和答案。@Alorva Ex So,写下你要写的额外内容,这样你就可以编译和测试了在Netbeans中…然后只复制编程实验室期望的特定部分。这样,您将获得Netback的详细编译器错误反馈,更好地测试您自己的代码,您可以使用调试器等。当您对代码的工作方式感到满意时,您仍然可以使用编程实验室。我不知道问题在于这种策略。这是家庭作业,所以答案必须是递归的。我确实说过,基于正则表达式的方法更容易,而不是要求所规定的。不过,至少现在我明白了裸露的s.substring()
是干什么用的。是的,如果你去掉了代码,那么没有什么是正确的,因为编译器会说你需要