我正在进行在线CPS课程,而且我需要编写一个代码来计算字符串中的元音(大写和小写)。这是我的代码:
public static int countVowels( String s )
{
{
if ( s.length() == 0 )
return 0 + countVowels(s);
else if ( (s.substring(0, 1) == "a" ) || (s.substring(0, 1) == "A") )
return 1 + countVowels(s.substring(1));
else if ( (s.substring(0, 1) == "e" ) || (s.substring(0, 1) == "E") )
return 1 + countVowels(s.substring(1));
else if ( (s.substring(0, 1) == "i" ) || (s.substring(0, 1) == "I") )
return 1 + countVowels(s.substring(1));
else if ( (s.substring(0, 1) == "o" ) || (s.substring(0, 1) == "O") )
return 1 + countVowels(s.substring(1));
else if ( (s.substring(0, 1) == "u" ) || (s.substring(0, 1) == "U") )
return 1 + countVowels(s.substring(1));
}
return countVowels(s.substring(1));
}
但是我收到了“StackOverFlow”错误,我不知道该怎么做。我知道错误意味着没有达到终止条件。我不允许使用任何我尚未学习的内容,也不允许使用for或while语句,因为这是一个递归问题。
我能帮忙吗?
答案 0 :(得分:2)
在s.length() == 0
导致无限递归的情况下。空字符串有0个元音,因此您应该编辑第5行到return 0;
另外需要注意的是:您要将字符串与==
进行比较。此运算符用于其他操作。请改用equals
。看看这个,例如:String comparison。那就是s.substring(0, 1) == "a"
应该成为s.substring(0, 1).equals("a")
事实上,我会给你一些其他的建议,比如只是在字符串中存储第一个字母,而不是在每种情况下计算它(两次)。此外,您可以获得第一个字符的小写字符,这样您就可以减少两次比较的情况。另外,将元音添加到数组中,此代码不是DRY。
答案 1 :(得分:0)
这是javascript中可能的解决方案。您可以通过创建文件'something.html'并在浏览器中打开它来测试它。
<html>
<head></head>
<body>
<div id="input">
</div>
<div id='answer'>
</div>
<script>
var vowels = ['a','e','i','o','u'];
var testInput = 'Hello this is just a test. Out with it.';
function Contains(value, inArray) {
var found = false;
for(var j=0, size = inArray.length; j < size; j++) {
if(value.toLowerCase() === inArray[j]) {
found = true;
}
}
return found;
}
var vowelCounter = 0;
for(var i=0, j = testInput.length; i < j; i++) {
if(Contains(testInput[i], vowels)) {
vowelCounter +=1;
}
}
var inp = document.getElementById("input");
inp.innerHTML = 'Question <br/>' + testInput;
document.getElementById('answer').innerHTML = 'Number of Vowels: ' + vowelCounter;
</script>
</body>
</html>
答案 2 :(得分:0)
我希望到现在你已经完成了你的作业。我用更短的方式解决了同样的问题:
public class CountVowels {
private static String vowels = "aeiou";
public static void main(String[] args){
String s = "RohanAskedAQuestion";
System.out.println(recursivelyCountVowels(s));
}
private static int recursivelyCountVowels(String s) {
if(s==null||s.length()==0)
{
return 0;
}
if(vowels.contains((CharSequence) s.substring(0, 1).toLowerCase())){
return 1+recursivelyCountVowels(s.substring(1));
}
return 0+recursivelyCountVowels(s.substring(1));
}
}
我希望它有帮助:),我也在学习java所以如果有人有任何建议请告诉我。 感谢。
答案 3 :(得分:0)
也许它有点迟了但仍然:)
public int recursiveCountVowels(String str,int count,int currentPosition)
{
str = str.toLowerCase();
if(str.trim().length() == 0)
return count;
if(currentPosition == str.length())
return count;
for(int i = currentPosition ; i < str.length();i++)
{
if(str.charAt(i) == 'a' || str.charAt(i) == 'e' || str.charAt(i) == 'i' || str.charAt(i) == 'o' || str.charAt(i) == 'u')
count++;
currentPosition++;
}
return recursiveCountVowels(str, count, currentPosition);
}
答案 4 :(得分:0)
元音数(vc) - 返回输入字符串中元音的数量。
public static int vc(String s)
{
if(s.length() - 1 < 0) return 0;
return((("aeiou".indexOf((s.charAt(s.length()-1)+"").toLowerCase()) >= 0 ? 1 : 0))
+ vc((s = s.substring(0,s.length()-1))));
}