2

ユーザーが入力した文字列内の各母音をカウントし、各母音が発生する回数を出力する単純なJavaアプリケーションを作成することになっています。

コードが文字列内の個々の単語をチェックしている理由がわかりません。単語ごとに適切な量の母音を取得しています。これが私が持っているものです:

import java.util.Scanner;

public class VowelAnalyst
     {
//
//

public static void main (String[] args)
{
String userString;
int aCount = 0, eCount = 0, iCount = 0, oCount = 0, uCount = 0;
char vowels;

Scanner scan = new Scanner (System.in);

System.out.println ("enter string:");
userString = scan.nextLine();

for (int count = 0; count < userString.length(); count++)
{

vowels = userString.charAt(count);

    switch (vowels)
    {
    case 'a':
        aCount++;
        break;

    case 'e':
        eCount++;
        break;

    case 'i':
        iCount++;
        break;

    case 'o':
        oCount++;
        break;

    case 'u':
        uCount++;
        break;

    default:
        System.out.println ("Please enter valid string.");

    }

            System.out.println ("a: " +aCount);
            System.out.println ("e: " +eCount);
            System.out.println ("i: " +iCount);
            System.out.println ("o: " +oCount);
            System.out.println ("u: " +uCount);
        }
    }
}
4

2 に答える 2

3

以下の print ステートメントを for ループの外に移動する必要があるかもしれません。そうしないと、すべての文字が比較された後にカウントが出力されます。

System.out.println ("a: " +aCount);
System.out.println ("e: " +eCount);
System.out.println ("i: " +iCount);
System.out.println ("o: " +oCount);
System.out.println ("u: " +uCount);

更新: -

あなたのやり方は悪い方法ではありませんがMap<Character, Integer>、各 のカウントを保存するためにを維持する方が良いでしょうVowel。各文字の初期カウント 0 で Map を初期化する必要があります。次に、Map で一致が見つかった場合は、文字を読み取るたびにカウントをインクリメントするだけです。

サンプル スニペットは次のとおりです。

// This is `double-braces` initialization. 
// You can rather initialize your Map in a way you are comfortable with
Map<Character, Integer> vowels = new HashMap<Character, Integer>() {
    {
        put('a', 0);
        put('e', 0);
        put('i', 0);
        put('o', 0);
        put('u', 0);
    }
}; // Note the semi-colon here

そして、for ループで文字列から各文字を読み取るコード: -

for (int count = 0; count < userString.length(); count++)
{
    char ch = userString.charAt(count);
    ch = Character.toLowerCase(ch);

    if (vowels.containsKey(ch)) {
        vowels.put(ch, vowels.get(ch) + 1); 
    }
}

System.out.println(vowels);  // Will print each vowels with respective count
于 2012-10-22T19:28:42.247 に答える
0

キャラクターを保存するために本当にマップを作成する必要がありますか?

public static void main(String[] args)
{
    char[] vowels = "aeiouAEIOU".toCharArray();
    String text = "I am a Java programmer";
    int[] vowelsCount = new int[vowels.length];

    for (char textChar: text.toCharArray())
    {
        for (int i = 0; i < vowels.length; i++)
        {
            char vowel = vowels[i];

            if (vowel == textChar)
            {
                vowelsCount[i]++;
                break;
            }
        }
    }

    for (int i = 0; i < vowelsCount.length; i++)
    {
        System.out.println(vowels[i] + " - " + vowelsCount[i]);
    }
}

出力:

a - 5
e - 1
i - 0
o - 1
u - 0
A - 0
E - 0
I - 1
O - 0
U - 0
于 2012-10-22T20:14:53.633 に答える