如何创建一个使用数组来计算元音的程序?

时间:2014-02-11 13:48:02

标签: java arrays

我在创建程序时遇到一些麻烦,该程序使用数组来计算用户输入的名称中的元音。用户应该能够输入最多1000个名称或说“完成”以结束程序。一旦用户获得1000个名字或说完,就应该显示每个名称中元音的总量。 以下是我到目前为止的情况:

import java.util.Scanner;
import java.lang.String;
import java.lang.Math;

public class Countvowels
{
    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        final int LOW ='A';
        final int HIGH = 'Z';
        int[] letterCounts = new int[HIGH-LOW+1];
        String[] word = new String[1000];
        char[] wordLetter;
        int offset;
        System.out.println("Enter a name: ");
        for(int letter = 0; letter < wordLetter.length; letter++){
            word[letter] = input.nextLine();
            wordLetter = word.toCharArray();

        }
    }
}

非常感谢帮助!

3 个答案:

答案 0 :(得分:4)

别介意所有代码。你只需要一行:

String[] word = new String[1000]; // given this

int vowels = Arrays.toString(word).replaceAll("(?i)[^aeiou]", "").length();   

这首先将数组转换为字符串(基本上是csv),然后替换所有非元音(fyi (?i)是不区分大小写的标志)什么都没有(即删除它们),然后只留下元音只需要考虑长度。

答案 1 :(得分:0)

如果你需要所有元音的总数@Bohemian有一个很好的答案。如果你需要它们分开,可能更容易做到以下几点:

只需创建一个包含所有用户输入的大字符串。

然后例如当你最终得到:

String userInput = 'JohnMaryLisaPeter';


for(int x = 0; x <= userInput.length() - 1; x++) {
    if(userInput.charAt(x) == 97)
        vowelA++;
    else if(userInput.charAt(x) == 101)
        vowelE++;
    else if(userInput.charAt(x) == 105)
        vowelI++;
    else if(userInput.charAt(x) == 111)
        vowelO++;
    else if(userInput.charAt(x) == 117)
        vowelU++;   
} 

System.out.println("There were " + vowelA + " A's in all your names.");
System.out.println("There were " + vowelE + " E's in all your names.");
System.out.println("There were " + vowelI + " I's in all your names.");
System.out.println("There were " + vowelO + " O's in all your names.");
System.out.println("There were " + vowelU + " U's in all your names.");

答案 2 :(得分:0)

我看到三个错误:

你有字符数组

char[] wordLetter;

元音,但你将它用作for循环终止。数组中还没有任何内容 - 根本没有数组,只是内存中的一个标记,创建 - 所以你要将字母与虚无比较!

for(int letter = 0; letter < wordLetter.length; letter++){

应该是

for(int letter = 0; letter < [some_number_here]; letter++){

在for循环中,您试图将单词的整个数组更改为字符数组,这没有任何意义。命名单词数组word让您感到困惑。试试aWords或其他什么。

          wordLetter = word.toCharArray();

修正:

          wordLetter = word[letter].toCharArray();

letter是变量名称的另一个糟糕选择。试试iIndex

我希望这有帮助!