0

我无法让这个程序正常工作,有人可以看看它并给我一个线索来告诉我该怎么做吗?谢谢!

设计并实现一个应用程序,它从用户那里读取一个字符串,然后确定并打印每个小写元音(a、e、i、o 和 u)在整个字符串中出现的数量。每个元音都有一个单独的计数器。还要计算和打印非元音字符的数量。

提示、标签和输出的规范:您的代码应使用提示“输入字符串:”。读取输入后,有六行输出,每行以不同的标签开头:“a:”、“e:”、“i:”、“o:”、“u:”、“other:”那个命令。每个标签之后是所需的计数。

例如:如果读入“aardvark heebie jeebies”,输出将是:

a: 3
e: 6
i: 2
o: 0
u: 0
other: 12

    import java.util.Scanner;
    public class VowelAnalyst{


    public static void main(String args []){

    int a =0, e = 0, x = 0;
    int u = 0, o = 0, other = 0;
    String text;
    Scanner scan = new Scanner(System.in);


    System.out.print("enter string: ");
    text = scan.nextLine();

    for (int i = 0; i < text.length(); i++) {
    char c = text.charAt(i);

    if (c=='a')
    a++; 

    else if( c=='e')
    e++;

    else if(c=='i')
    x++;

    else if(c=='o')
    o++;

    else if (c=='u')
    u++;        

    else
    other++;
    }

    System.out.println("a: " + a + "\n" +
    "e: " + e + "\n" +
    "i: " + x + "\n" +
    "o: " + o + "\n" +
    "u: " + u + "\n" +
    "other: " + other);

    }
    }
4

3 回答 3

3

if您的语句序列无效。一个有意义的演绎会是这样的

if (c == 'a') a++;
else if (c == 'e') e++;
...
else other ++;

但是,更好的选择是使用 switch 语句,就像这样

switch (c) {
    case 'a': 
        a++; 
        break;
    case 'e': 
        e++;
        break;
    case 'o': 
        o++;
        break;
    case 'u': 
        u++;
        break;
    default: 
        other++;
        break;
}

修复该问题后,我们需要查看您缺少的内容:所有大写元音当前都计为other. 我们可以在条件上加倍

if (c == 'a' || c == 'A')
...

或者

case 'A':
case 'a':
...

但是有一种更简单的方法:在比较之前将字符串转换为小写。

for (int i = 0; i < text.length(); i++) {
    char c = Character.toLowerCase(text.charAt(i));
    switch (c) {
    ...
于 2013-05-06T15:29:49.290 回答
3

除了这部分之外,您的代码是正确的:

else if (c != 'a' && 'e' && 'i' && 'o'&& 'u' )

它应该这样写:

else if (c != 'a' && c != 'e' && c != 'i' && c != 'o' && c != 'u')

if您可以通过将除第一个之外的所有内容转换为 anelse if和最后一个来使代码更清晰,您可以else if在其中检查字符是否不是任何元音,可以简单地为 an else

if (c == 'a')
{
    a++;
}
else if (c == 'e')
{
    e++;
}
else if (c == 'i')
{
    x++;
}
else if (c == 'o')
{
    o++;
}
else if (c == 'u')
{
    u++;
}
else
{
    other++;
}
于 2013-05-06T15:33:09.957 回答
2

我会为每个字符做

switch (c)
{
    case 'a':
    case 'A':
        a++;
        break;
    case 'e':
    case 'E':
        e++;
        break;
    case 'i':
    case 'I':
        i++;
        break;
    case 'o':
    case 'O':
        o++;
        break;
    case 'u':
    case 'U':
        u++;
        break;
    default:
        other++;
        break;
}

它只计算每个元音和辅音。

于 2013-05-06T15:29:51.637 回答