我的java代码/函数有什么问题?

时间:2015-03-07 04:13:29

标签: java

我正在尝试计算一个句子中单词的数量,这些单词在一对“z”字符之间恰好包含两个元音而没有" z"它们之间。单词之间可能有多个空格,字母可以是大写或小写。显示每个句子中与模式匹配的单词数。继续阅读句子,直到用户输入" *"。我当前的代码有什么问题。我有两个类In和Root,用于输出/输入。 我有以下代码用于root,它有很多问题; //

public class Root
{   public static void main(String[] args)
    {   new Root();  }

    public Root()
    {  
        String sentence = readSentence();
        int count = 0;

        while(!(sentence = readSentence()).equals("*"))
        {
            System.out.println("  Matching words = " + words(sentence));

        }


    }

    private int words(String sentence)
    {
        int count = 0;
        for(String word: sentence.split(" +"))
        {
            if(matches(word))
                count++;
        }

        return count;
    }

    private boolean matches(String word)
    {
        int Vowels = 3;
        for( int i = 0; i < word.length(); i++)
        {
            char c = word.charAt(i);

            if( c == 'z')
            {
                for (i=3; i<word.length(); ++i) {
                    if (word.charAt(i)=='z' && word.charAt(i-3)=='z' && isVowel(word.charAt(i-1)) && isVowel(word.charAt(i-2))) {
                        return true;
                    }
                }
                return false;
            }
            else if(isVowel(c))
            {

            }

        }
        return false;
    }

    private boolean isVowel(char c)
    {
        return "aeiou".contains("" + c);

    }

    private String readSentence()
    {
        //prompt
        System.out.println("Sentence: *");
        //return Value

        return In.nextLine().toLowerCase();
    }

}

2 个答案:

答案 0 :(得分:0)

您的matches方法有一个使用相同索引的内部循环 - i - 作为外部循环。这不可能是对的。为内循环使用不同的变量。

此外,您的Root构造函数对第一次调用readSentence()时返回的句子不执行任何操作。

答案 1 :(得分:0)

让我给你一些建议。

  • 您应该使用indexOf方法而不是contains,因为您可以直接传递字符。
  • 您应该在常量中声明aeiou值,以避免每次调用方法时重新创建它。
  • 按惯例变量必须以小写字母和大写字母开头,每个后续单词。
  • 您在内循环中使用相同的变量i,这可能是导致问题的主要原因。