2016-10-31 44 views
0

对于类,我需要对文本文件执行多路排序。具体来说,我需要按元音计数,然后按长度来组织单词。我的问题在于按元音的数量对数组进行排序。按元音的数量对ArrayList中的字符串排序

我试图做的是迭代每个单词并计算该单词的元音。根据元音的数量,它会被添加到相应的队列中。

private static void vowelQueues(String[] words) { 

    Queue<String> noVowel = new LinkedList<String>(); 
    Queue<String> oneVowel = new LinkedList<String>(); 
    Queue<String> twoVowel = new LinkedList<String>(); 
    Queue<String> threeVowel = new LinkedList<String>(); 
    Queue<String> fourVowel = new LinkedList<String>(); 
    Queue<String> fiveVowel = new LinkedList<String>(); 
    Queue<String> sixVowel = new LinkedList<String>(); 
    Queue<String> sevenVowel = new LinkedList<String>(); 
    Queue<String> eightVowel = new LinkedList<String>(); 
    Queue<String> nineVowel = new LinkedList<String>(); 
    Queue<String> tenVowel = new LinkedList<String>(); 

    char ch; 
    String vowelHolder = ""; 
    int numVowels = 0; 
    for (String word : words) { 


     for (int i = 0; i < word.length(); i++) { 
      ch = word.charAt(i); 
      if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') { 
       numVowels++; 
       if (numVowels == 1) { 
        oneVowel.add(word); 
        numVowels = 0; 
       } else if (numVowels == 2) { 
        twoVowel.add(word); 
        numVowels=0; 
       } else if (numVowels == 3) { 
        threeVowel.add(word); 
        numVowels=0; 
       } 
      } 
     } 
    } 


    System.out.print(oneVowel); //These are test output statements 
    System.out.print(twoVowel); 
    System.out.println(threeVowel); 

} 

问题是,包含元音的所有单词被添加到oneVowel队列中,其余的保持空白。我认为这是因为只要第一个if语句将整个单词添加到第一个队列中,numVowels就会递增。

我怎么会做它,所以它计数一句话都元音和然后将其添加到它的相应的队列?

回答

2

发生这种情况是因为当任何条件为真时,您将变量numVowels指定为零。你的numVowels变量永远不会增加,总是第一个条件成立。所以,只有元素被添加到oneVowel队列中。

for (String word : words) { 
    numVowels = 0; 
    for (int i = 0; i < word.length(); i++) { 
      ch = word.charAt(i); 
      if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') { 
       numVowels++; 
      } 
    } 
    if (numVowels == 1) { 
     oneVowel.add(word); 
    } else if (numVowels == 2) { 
     twoVowel.add(word); 
    } else if (numVowels == 3) { 
     threeVowel.add(word); 
    } 
} 
+0

它运作良好,谢谢!我确实有一个问题。如果将numVowels移出for循环,为什么代码无法工作? –

+0

在for循环中迭代单词吗?想想看。你想为每个单词计算元音,所以你需要在每次扫描单词前每次初始化变量。如果你将它初始化在outer for循环之外,numVowels会给你在所有单词上找到的总元音,而不仅仅是一个字一个单词。 –

+0

啊,这很有道理。这就是我在if语句中设置vowelCount = 0时所要做的。正如我的老师告诉我的,java不会犯错;用户确实。我一直在尽我所能来体现这一点,所以感谢修复这个用户错误! –