我试图找到元音然后添加它们,但我做到了吗?

时间:2015-09-02 16:53:47

标签: java java.util.scanner

Idk如果我这样做了..我只是想知道如何将元音一起添加到三个因为我的名字是Daniel 3总元音但是当我添加其他名字时它不起作用。

import java.util.Scanner;


public class Pratclass {

    public static void main(String[] args) 
    {
        Scanner std= new Scanner(System.in);
        String string1;
        System.out.println("What is your name");
        string1= std.nextLine();

        int count= 0;
        int vowels=0;

        for(String retval: string1.split(""))
        {
            for(int i=0; i < retval.length(); i++)
            {
                char c= retval.charAt(i); 
                if(c== 'a' || c== 'e' || c== 'i' || c== 'o'|| c== 'u') 
                {
                    vowels++;
                }
                else
                {
                    count++;
                }
                System.out.println(retval.substring(0,1) + retval.substring(1) + vowels);
                vowels=0;
                }
        }
        int total=vowels++;

        total=(total + vowels++ + vowels);      < How can I count the vowels 
        System.out.println();

        System.out.println(total);

    }   
}

5 个答案:

答案 0 :(得分:1)

您正在重复循环的每次迭代重置计数器(元音)。不要每次都设置元音= 0,让你的每个元音继续增长。

一旦你完成了这项工作,你就可以删除你在其他地方添加到元音中的所有随机++,这就是你的结果总是达到3的原因。

    由于元音= 0行,
  • 元音总是出现0
  • totals = vowels ++ - &gt; totals = 0,元音= 1
  • 总计=(总+元音++ +元音) - &gt; 3 = 0 + 1(然后使元音2)+ 2

    int count= 0;
    int vowels=0;
    
    for(String retval: string1.split(""))
    {
        for(int i=0; i < retval.length(); i++)
        {
            char c= retval.charAt(i); 
            if(c== 'a' || c== 'e' || c== 'i' || c== 'o'|| c== 'u') 
            {
                vowels++;
            }
            else
            {
                count++;
            }
        }
    }
    
    System.out.println("Found " + vowels + " vowel(s) among " + (vowels + count) + " character(s).");
    

希望有所帮助。

答案 1 :(得分:1)

试试这个:

    int count=0;
    int vowels=0;
    boolean isVowel = false;

    for(String retval: string1.split(""))
    {
        for(int i=0; i < retval.length(); i++)
        {
            char c= retval.charAt(i); 
            if(c== 'a' || c== 'e' || c== 'i' || c== 'o'|| c== 'u') 
            {
                isVowel = true;
                vowels++;
            }
            else
            {
                isVowel = false;
                count++;
            }
            System.out.println(retval.substring(0,1) + retval.substring(1) + (isVowel ? 1 : 0) );
            }
    }
    System.out.println(vowels); //prints the number of vowels in the name

您只需要boolean来存储当前char是否为元音。 (isVowel?1:0)在1时返回isVowel==true,在0时返回isVowel==false。这是一个三元运算符,非常方便。

另外,在表达式中使用++时要小心......请查看以下代码片段,了解原因示例:

int total = 5;
int vowels = 2;

total = vowels++; //total = 2 and vowels = 3

如果我们写了:

int total = 5;
int vowels = 2;

total = ++vowels; //total = 3 and vowels = 3

识别var++返回原始值(并将var递增1),而++var返回递增的值(并将var递增1)

此外,count变量在此处不执行任何操作,因此除非有更多代码实际使用它,否则您可以删除它... count将返回非元音的数量(这包括辅音,空格,符号等)

答案 2 :(得分:1)

你也可以使用这个......

import java.util.Scanner;

public class Pratclass1 {

public static void main(String[] args) {
Scanner std= new Scanner(System.in);
String string1;
System.out.print("What is your name :");
string1= std.nextLine();

int count= 0;
int vowels=0;

char[] ar = new char[string1.length()];

for(int i = 0; i < ar.length; i++) {
    ar[i] = string1.charAt(i);
    if(ar[i] == 'a' || ar[i] == 'e' || ar[i] == 'i' || ar[i] == 'o'|| ar[i] == 'u') {
        vowels++;
    } else {
        count++;
    }
}

int total=vowels;
System.out.println();
System.out.println(total);
}   

}

答案 3 :(得分:1)

我认为你已经找到了@Eric Lindauer答案中“计算元音”问题的答案。

但是关于“String.retval”它不是“String.retval”,而是:

for(String retval: string1.split(""))

这称为 foreach 循环,意思是:对于每个字符串(你称之为retval),在大字符串中(你输入的整个名称,你称之为string1)执行以下操作(正文for loop)。

如果您输入“Daniel”,则retval(s)将为: D然后是i,e,l。

运行代码时看到的输出是因为您使用 substring 方法。

当你说:retval.substring(0,1)时,它意味着“给我一个从索引0到1开始的retval子串”

当你说:retval.substring(1)时,它意味着“给我一个retval中的子串,从索引1开始到字符串结尾”

所以当retval为“D”时:retval.substring(0,1)= D. ... retval.substring(1)=没有,因为字符串长度是1  ...元音= 0/1(当它不是元音时为0,当它是......时是1,因为你在每次循环后将它设为零)

所以(retval.substring(0,1) + retval.substring(1) + vowels) = D0

答案 4 :(得分:0)

static final String NAME_PATTERN = "^[a-zA-Z]{2,}((-|\\s)[a-zA-Z]{2,})*$"; // https://jex.im/regulex/#!embed=false&flags=&re=%5E%5Ba-zA-Z%5D%7B2%2C%7D((-%7C%5Cs)%5Ba-zA-Z%5D%7B2%2C%7D)*%24
static final String VOWELS = "aeiou";

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String name = getName(sc);
    int vowelCount = getVowelCount(name);
    int consonantCount = name.replace(" ", "").replace("-", "").length() - vowelCount;
    System.out.printf("Vowels: %d\nConsonants: %d\n", vowelCount, consonantCount);
}

public static String getName(Scanner sc) {
    System.out.print("Type your name: ");
    String result = sc.nextLine();
    if (result.matches(NAME_PATTERN)) {
        return result;
    }
    System.out.println("Your input contains invalid characters. Try again please.");
    return getName(sc);
}

public static int getVowelCount(String name) {
    int count = 0;
    for (char letter : name.toLowerCase().toCharArray()) {
        if (VOWELS.indexOf(letter) >= 0) {
            count++;
        }
    }
    return count;
}