【问题标题】:java Vowel Counter Using Switch Method使用 Switch 方法的 java 元音计数器
【发布时间】:2012-10-22 19:25:55
【问题描述】:

我应该编写一个简单的 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);
        }
    }
}

【问题讨论】:

  • 您遇到了什么问题?
  • 从技术上讲,y 也可以被视为元音。
  • @mast3rch1ef... 这个食谱对我来说很好:-P;-)
  • @MukulGoel link => "因此,字母 Y 是元音还是辅音是相当随意的决定。字母可能更常用作元音,但在这角色它通常可以与字母 I 互换。但是,辅音在英语拼写中并没有一致地由任何其他字母表示,也许由于这个原因,Y 传统上倾向于被计入辅音中。”
  • @MukulGoel 有趣的是,用法语(我的母语)y is a vowel。在英语中,它似乎是边界线,但更多的是在辅音方面;-)

标签: java switch-statement


【解决方案1】:

您可能应该将下面的打印语句移出 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&lt;Character, Integer&gt;来存储每个Vowel的计数会更好。您需要使用每个字符的初始计数 0 来初始化 Map,然后在读取的每个字符上,如果在 Map 中找到匹配项,只需增加计数。

这是一个示例 sn-p:-

// 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

【讨论】:

  • 嘿,谢谢大家,这个网站的新手,这是一些很棒的响应时间。它解决了我的问题。还有一个问题。我的默认值可以在 switch 语句中为 null 吗?像这样
  • @Mast3rCh1ef 您不需要默认值。您可以删除该行。
  • 再次感谢!但是如果输入了未知字符或特殊字符会怎样?
  • @Mast3rCh1ef。然后它将被简单地忽略。你不想数他们吧?所以,不要理他们。无视就好。
  • 完美。只是好奇,有没有办法在 switch 语句中用另一种情况计算字符串中不是元音的剩余字母?
【解决方案2】:

你们真的需要创建地图来存储一些角色吗?

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

【讨论】:

  • 我想我们不必做任何事情......两者都是很好的解决方案。感谢您的意见!
  • 如果你打算这样做,你最好使用"eEaAoOIiuU",如果你的源语言是英语
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多