当前位置: 首页 > 知识库问答 >
问题:

用辅音数元音

计光赫
2023-03-14

我做了一个程序来计算输入字符串中元音和辅音的数量:

        Scanner in = new Scanner(System.in);


System.out.print("Enter a string ");
    String phrase = in.nextLine();

int i, length, vowels = 0;
int consonants = 0;
boolean y = false;
String j;
length = phrase.length();
for (i = 0; i < length; i++)
{



        j = "" + phrase.charAt(i);


     boolean isAVowel = "aeiou".contains(j.toLowerCase());
     boolean y = "y".contains(j.toLowerCase());


     if(isAVowel){
         vowels++;
     }else if(isAVowel && y){
     vowels++;
    consonants++;
//}else if(y && !(isAVowel)){
//   vowels++;
      }else{
      consonants++;
      }


System.out.println("The number of vowels in \"" +phrase+"\" is "+ vowels+".\n\nThe number of consonants is "+consonants+".\n\n");

当“y”本身是辅音时,它应该是元音。我在哪里陈述?

共有3个答案

郦何平
2023-03-14

我不明白你到底想用“y”做什么,所以把它们分开计算。有必要首先从输入中删除所有非单词字符。

我已经修改了你的代码(虽然还没有优化):

System.out.print("Enter a string: ");
String origphrase = new Scanner(System.in).nextLine();
String phrase = origphrase.replaceAll("\\W","");
int i, length, vowels = 0;
int consonants = 0;
int ys=0;
String j;

length = phrase.length();
for (i = 0; i < length; i++)
{
  j = "" + phrase.charAt(i);
  boolean isAVowel = "aeiou".contains(j.toLowerCase());
  boolean y = "y".contains(j.toLowerCase());
  if(isAVowel){
    vowels++;
  }else if(y){
    ys++;
  }else{
    consonants++;
  }
}

System.out.println("Phrase:"+origphrase);
System.out.println("Vowels:"+vowels);
System.out.println("Consonants:"+consonants);
System.out.println("Y's:"+ys);
穆建华
2023-03-14

也许你应该简单地使用正则表达式

String phrase = in.nextLine();
int consonants = phrase.replaceAll("a|e|o|u|i", "").length();
int vowels = phrase.replaceAll("[^a|e|o|u|i|y]", "").length();
华景明
2023-03-14

这里发生了几件事:

>

  • j.equalsIgnoreCase("a, e, i, o, u")将检查j(长度为1的字符串)是否是字符串"a, e, i, o, u",这几乎肯定不是您想要的(因为它总是false,因此您为每个辅音设置y=true)。相反,考虑在每次迭代开始时将布尔值设置为false,并在元音分支中将其设置为true。然后,如果该变量为true,您就知道这次您看到了元音。或者只需要有其他分支。

    您在循环外将y初始化为false,但一旦y为true,它就永远不会被重置,因此对于每个字母,您将运行if(y==true)块。

    现在,你的系统只计算有1个y的单词,没有元音。如果你输入“yyy”,你会得到1个元音

    从风格上来说,您可以进行许多其他更改,以使您的程序更易于阅读和调试。以下是一些:

    在检查布尔值时,您不必执行“==true”。例如,只需执行“if(y)”,而不是“if(y==true”。

    所有元音的处理都是相同的,因此每个元音不需要单独的分支。例如,您可以:

    if (j.equalsIgnoreCase("a") 
        || j.equalsIgnoreCase("e")
        || j.equalsIgnoreCase("i")
        || ...)
    {
        vowels++;
    }
    

    事实上,您可以通过使用正则表达式检查元音值的集合来进一步简化这一过程,或者在这种情况下,只需使用contains:

    boolean isAVowel = "aeiou".contains(j.toLowerCase());
    

    考虑单独计算y,以便在3个单独的计数器中跟踪元音、ys和常数。最后,你可以决定是在元音还是辅音中加y。

    最后,添加一个系统。出来println(“元音=“元音”,辅音=“辅音”…) 编码到循环内部。这将使我们更容易看到正在发生的事情以及事情开始出错的地方。

  •  类似资料:
    • 我不知道如何同时有元音和辅音。代码的元音部分工作正常。我不知道如何添加辅音。 我似乎无法理解代码的辅音部分

    • 问题内容: 我在这里犯了什么愚蠢的错误,使我无法确定用户输入的第一个字母是辅音?不管我输入什么,它都可以确定第一个字母是元音。 问题答案: 更改: 至: 总是因为它被评估为 ,因为非空字符串始终为True,因此将其评估为True。

    • 我在这里犯了什么愚蠢的错误,阻止我确定用户输入的第一个字母是辅音?无论我输入什么,它都允许第一个字母是元音。

    • 本文向大家介绍如何在Python中检测元音与辅音?,包括了如何在Python中检测元音与辅音?的使用技巧和注意事项,需要的朋友参考一下 首先,您应该检查字符是否为字母。然后,您可以创建一个元音列表,并使用该列表检查字符是否为元音。如果没有,那一定是辅音。例如, 这将给出输出:

    • 输入20个字符串的数组。制作一个程序,打印出辅音多于元音的字符串,其中字母“r”至少重复3次。 我相信问题出在我的 if 循环中,但不知何故我不明白为什么它不能正常工作。它会打印我输入的每个字符串。 这是我写的代码:

    • 样本输出字符串:检测到汉娜输出元音的最后一部分:检测到辅音:h n n h