0

私はオンライン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を使用することも許可されていません。

助けてもらえますか?

4

5 に答える 5

2

s.length() == 0無限再帰を引き起こしている場合。空の文字列には母音が0あるため、5行目をreturn 0;別の注意事項に編集する必要があります。文字列を。と比較しています==。この演算子は他の何かを対象としています。equals代わりに使用してください。たとえば、これを見てください:文字列の比較。それはs.substring(0, 1) == "a"なるはずですs.substring(0, 1).equals("a")

実際のところ、すべての場合に計算するのではなく、文字列の最初の文字を格納するなど、他にもアドバイスがあります(その場合は2回)。また、最初の文字の小文字を取得できるため、比較する大文字と小文字を2回に減らすことができます。また、配列に母音を追加します。このコードはDRYではありません。

于 2012-07-04T01:35:24.670 に答える
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>
于 2012-07-04T02:06:31.483 に答える
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を学んでいるので、誰か提案があれば教えてください。ありがとう。

于 2012-07-05T08:21:55.487 に答える
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);

}
于 2012-09-27T05:06:25.367 に答える
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))));
}
于 2014-08-30T08:05:12.427 に答える