1

配列内の各単語の母音の数を見つけるプログラムを書いています。コードを完成させましたが、ifステートメントの後に戻り値がどのように処理されるかがわかりません。

public static int vowels(char [] array, int x, int y) {
    if(array[x]=='a' || array[x]=='e' || array[x]=='i' || array[x]=='o' || 
                                         array[x]=='u' || array[x]=='y') {
        y++;
    }
    if (x < array.length) {
        x++;
        vowels (array, x, y);
        return ???;
    } else {
        return y;
    }
}
4

5 に答える 5

2

それ以外の

vowels (array, x, y);
return ???;

これはクリーンな関数であり、副作用がないため、母音によって計算された値を返す必要があります。

return vowels (array, x, y);
于 2013-02-01T07:39:10.937 に答える
1

私があなたを正しく理解していれば-

private static String vowelString = new String("aeiou");
public static int vowels(char [] array) {
        int x=0;
        for(char ch:array) {
            if(vowelString.indexOf(ch)>=0)
                x++;
        }
        return x;
    }
于 2013-02-01T07:46:08.240 に答える
0

ここで再帰を使用すると、非常に醜い解決策になります。次のように書き直すと、はるかに簡単になります。

public static int vowels(char[] array) {
    int y = 0;
    for (char x : array) {
        if (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u' || x == 'y')
            y++;
    }
    return y;
}

しかし、実際に再帰を使用する必要がある場合 (たとえば、宿題であり、再帰を使用する必要がある場合)、コードのいくつかの間違いを修正し、y引数を削除する必要があります。これは不要です。

public static int vowels(char[] array, int x) {
    int y = 0;
    if (array[x] == 'a' || array[x] == 'e' || array[x] == 'i' || array[x] == 'o' ||
            array[x] == 'u' || array[x] == 'y')
        y++;
    if (x < array.length - 1) {
        x++;
        y += vowels(array, x);
    }
    return y;
}
于 2013-02-01T07:43:36.093 に答える
0
  • まず、母音のマップを用意します。
  • 次に、配列を繰り返し処理し、各要素がマップに存在するかどうかを確認します。存在する場合は、カウンターを更新します。それ以外の場合は、引き続き他の要素を確認してください。

サンプルコード:

Map<String, String> vowels = new HashMap<String, String>() {
    {
        put("a", "");
        put("e", "");
        put("i", "");
        put("o", "");
        put("u", "");
        put("y", "");
    }
};

String input = "blablabla";
int counter = 0;

for (int i = 0; i < input.length(); i++) {
    if (vowels.containsKey(input.charAt(i) + ""))
        counter++;
}
于 2013-02-01T07:46:33.527 に答える
0

これがプログラムの解決策です-

public class so { public static void main(String[] args) { // TODO 自動生成メソッド スタブ

    char array[] = {'a', 'e', 'i', 'x', 'h', 't', 'd' };
    System.out.print( vowels(array, 0, 0));
}

public static int vowels(char [] array, int x, int y) {
    if(array[x]=='a' || array[x]=='e' || array[x]=='i' || array[x]=='o' || 
                                         array[x]=='u' || array[x]=='y') {
        y++;
    }

in x は、値がインクリメントされるため、array.length-1 より小さくなければならないことに注意してください。それ以外の場合は、範囲外のインデックス例外がスローされます。

    if (x < (array.length-1)) {
        x++;
        return vowels (array, x, y);

    } else {
        return y;
    }
    //return -1;
   }
}

乾杯、

于 2013-02-01T07:53:30.753 に答える