2016-10-31 67 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不會犯錯;用戶確實。我一直在盡我所能來體現這一點,所以感謝修復這個用戶錯誤! –