如何计算我们的String有多少个元音?

时间:2016-12-24 14:17:37

标签: java java.util.scanner do-while

我是Java新手,我正在努力解决挑战。我必须写一些单词并比较哪一个更长,以及有多少元音就越长。此外,如果你写“结束”,写作结束并打印其他内容,在我们的案例你没有写任何单词

终端(CMD)中的输出示例:

  

写一个单词,或写'结束'到结束写作:测试
  写一个字,或写'结束'到结束写:tee
  写一个字,或写'结束'到结束写作:测试
  写一个单词,或写'结束'到结束写作:结束

     

单词测试时间最长,有2个元音。

如果您不写任何单词,则输出示例:

  

写一个单词,或者写'结束'来结束写作:
  写一个字,或写'结束'到结束写作:
  写一个单词,或写'结束'到结束写作:结束

     

你没有写任何字。

应使用Scanner (Input)Switch CaseDo While对程序进行编码。应使用方法equalsIgnoreCase()比较字符串。

我尝试了很多次,而我所做的只是编写和删除代码。

这是我的代码:

import java.util.Scanner;

public class VowelFinder {

public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        String word = null;
        int num = 0;
        String max = null;
        final String SENTINEL = "end";

        System.out.println(" ");

        do {
            System.out.print("Write a word, or write `" + SENTINEL + "` to end writing: ");
            word = scan.nextLine();
            if(!word.equalsIgnoreCase(SENTINEL)) {

                int nr = countVowels(word);
                if (num <= nr) {
                    num = nr;
                    max = word;
                }
            }
        } while (!word.equalsIgnoreCase(SENTINEL));

        if (max != null) {
            System.out.println(" ");
            System.out.println("Word `" + max + "` is longest word, and countains " + num + " vowels.");
        }
        else {
            System.out.println(" ");
            System.out.println("You din't wrote any word !");
        }

}   


private static int countVowels(String word) {
    int counter = 0;
    int vowels = 0;

    while(counter < word.length()){
        char ch = word.charAt(counter++);


        switch (ch) {
            //Lower Case
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
            case 'y':
            //Upper Case
            case 'A':
            case 'E':
            case 'I':
            case 'O':
            case 'U':
            case 'Y':
            vowels++;

            default:
            // do nothing
        }
    }
    return vowels;
}

}

问题是:

当我在终端(CMD)中这样做时

  

写一个单词,或者写'结束'来结束写作:
  写一个字,或写'结束'到结束写作:
  写一个单词,或写'结束'到结束写作:结束

它打印我 Word''是最长的单词,并且有0个元音。,但它应该打印你没有写任何单词。

有人能帮助我吗?我哪里做错了?

如果我不写任何单词,它应该打印我你没有写任何单词

我希望我很清楚,你可以帮助我。如果我不清楚请问我。

感谢您的贡献。

3 个答案:

答案 0 :(得分:2)

将if条件更改为

if (word != null && !"".equals(word.trim()) && !word.equalsIgnoreCase(SENTINEL))

我添加了null支票并执行了trim以删除空格。

答案 1 :(得分:1)

我做了一些改动,它对我有用......

if (max != null && !max.trim().isEmpty() && max.length()>0) {
            System.out.println(" ");
            System.out.println("Word `" + max + "` is longest word, and countains " + num + " vowels.");
        }

答案 2 :(得分:0)

您可以检查countVowels()当前单词是否为空。

private static int countVowels(String word) {
    int counter = 0;
    int vowels = 0;
    if(word.length() == 0){
        return  -1;
    }
    ...
}

返回值小于0,因此max不会被替换。