Java 我需要数一数元音和辅音,但辅音让我很为难

Java 我需要数一数元音和辅音,但辅音让我很为难,java,Java,我搞不懂如何既有元音又有辅音。代码中的元音部分工作正常。我不知道如何添加辅音 import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner in = new Scanner(System.in); System.out.println("Enter some text: "); String str = in.next

我搞不懂如何既有元音又有辅音。代码中的元音部分工作正常。我不知道如何添加辅音

import java.util.Scanner;

public class Main
{
   public static void main(String args[])
   {
      Scanner in = new Scanner(System.in);

      System.out.println("Enter some text: ");
      String str = in.nextLine();
      System.out.println(str);

System.out.print("your input has " + count_Vowels(str) + "vowels");
    }
 public static int count_Vowels(String str)
    {
        int vcount = 0;
        for (int i = 0; i < str.length(); i++)
        {
            char ch = str.charAt(i);
            if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
            {
              vcount++;
            }
        }
        return vcount;
    }
public static int count_Consanants(String str)
    {
      int ccount = 0;
      for (int i = 0; i < str.length(); i++)
    {
      char ch = str.charAt(i);
      if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
      {
        vcount++;
      }
      else
      {
        consonants++;
      }
    }
  }  
}

我似乎无法理解代码的辅音部分

您的代码还将计算其他非辅音字符。下面是计算元音和辅音的简单方法:

for (int i = 0; i < str.length(); i++) {    
    //Checks whether a character is a vowel
    if (str.charAt(i) == 'a' || str.charAt(i) == 'e' || str.charAt(i) == 'i' || str.charAt(i) == 'o' || str.charAt(i) == 'u') {      
        vCount++;    
    }    
    //Checks whether a character is a consonant    
    else if (str.charAt(i) >= 'a' && str.charAt(i)<='z') {        
        cCount++;    
    }    
}    
同样,您也可以修改大写字符的代码

略显优雅:

Set<Character> vowels = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u'));

for (int i = 0; i < str.length(); i++) {
    char c = str.charAt(i);
    if (vowels.contains(c)) {
        vCount++;
    } else if (c >= 'a' && c <= 'z') {
        cCount++;
    }
}

这里有一种方法

首先,它将字符串转换为小写,以便于搜索 然后它为元音设置一个字符串。如果你算的话,你可能想加上y 主要部分在数组中循环,确保字符是字母,然后计算计数。只检查字母很重要,因为空格和标点符号可能会影响结果。 消除过程 你说:

我被辅音难住了

基本的想法是,在你测试了拉丁语字母a,字母b不是数字,标点符号等,字母c不是元音后,你可以假设你有一个辅音

正如您在下面代码示例的中心所看到的,我们使用级联if语句检查每个字符,这里总结为伪代码:

        if( … not part of the Latin script, such as Korean or emoji )
        {
            other++;
        }
        else if( … not a letter, such as digit or punctuation )
        {
            other++;
        } 
        else if ( … definitely a vowel )
        {  
            vowel++;
        } 
        else if ( … maybe a vowel (`y`) )
        {  
            maybeVowel++;
        } 
        else  // Else definitely not a vowel, so it must be a consonant. 
        {  
            consonant++;
        }
char是一种遗产 前两个答案基本正确,但使用过时的char类型。在中定义的140000多个字符中,该类型处理的字符不到一半。这些答案假设只有英语没有变音等等

Unicode码点 相反,要养成使用整数的习惯


String input=您的代码不是已经在做您想要的事情了吗?如果它不是元音,它是辅音,那么If的else块。。。else是增加辅音计数器。定义辅音:一个介于“a”和“z”之间的字符,它不是元音。我很想否决这个。鼠标悬停在“向下投票”按钮的文本上表示:此答案无效。这个答案对于那些显然还没有将注意力集中在ASCII、变量和循环上的人来说肯定是没有用的。在这里,答案看起来像是在炫耀,它更适合于一个关于unicode等主题的真实问题,而不是一个应该以不清楚/寻找调试帮助来结束的问题的答案…@Marco13正如我所说,char类型确实是有缺陷和过时的。使用代码点整数是现代Java中处理字符的正确方法。我使用数组而不是集合来编写这段代码,以保持代码的简单性,并接近问题中所示的代码。在现代信息系统世界中,教新程序员只使用美式英语和ASCII文本是不负责任的。如果我对编程和写那个问题还不熟悉,我写的答案正是我想要找到的。你所谓的炫耀,我称之为展示基本的文本处理。@Marco13你的评论确实启发我在顶部添加伪代码,以总结通过排除所有其他可能性来确定辅音的方法。谢谢你。没有必要争论答案本身的内容。事实上,尽管有超过20年的编程经验,我还是从中学到了一些东西。问题的关键是:提问者提出了一个问题,归结为由于未声明变量而无法编译的代码段。不管你把标准定得多低,总有人会做不定的事。你的答案可能更适合或类似的答案。具体地说:如果你的所有努力都白费了,当这个问题被删除的时候,那将是很遗憾的,因为它应该被删除:如果它被发布到一个合适的问题上,我当然会投上一票——例如,我链接到的那个问题,但可能还有其他问题更适合
        if( … not part of the Latin script, such as Korean or emoji )
        {
            other++;
        }
        else if( … not a letter, such as digit or punctuation )
        {
            other++;
        } 
        else if ( … definitely a vowel )
        {  
            vowel++;
        } 
        else if ( … maybe a vowel (`y`) )
        {  
            maybeVowel++;
        } 
        else  // Else definitely not a vowel, so it must be a consonant. 
        {  
            consonant++;
        }