2016-09-26 59 views
0

我正在嘗試編寫一個程序,該程序將讀取一個文件,並在具有最多連續元音的文件中查找該單詞。我通過從文件中獲取每個新單詞,將其轉化爲charArray,然後評估數組中的字符以查看它們是否是元音來做到這一點。計數器保持連續元音的數量,然後如果當前字的計數器大於最大的前一個計數器值,則變量maxVowelString被設置爲當前計數器的值。連續元音計數在無限循環中結束

我已經解決了一些錯誤與我如何處理charArray,但是當我在終端中運行它,它什麼都不做,只是在一個無限循環中結束。我無法弄清楚是什麼原因造成的。有沒有人有任何想法? (我在編碼方面有點新,所以可能會出現邏輯錯誤或者我不明白的地方)。

更新:我提出了幾個建議的更改,並進行了調試。該程序陷入這個特定的循環,但我不明白爲什麼。

while ((i + n) < lowercase.length())  
       { 
        System.out.println("i + n " + (i + n)); 
        if ((charsList.get(i+n) == 'a') || (charsList.get(i+n) == 'e') || (charsList.get(i+n) == 'i') || (charsList.get(i+n) == 'o') || (charsList.get(i+n) == 'u')) 
        { 
         isVowel = true; 
         counter++; 
         System.out.println("counter " + counter); 
         i++; 
        } 
        else 
        { 
         isVowel = false; 
        } 
       } 
+3

'while(isVowel = true)'將始終爲true,因爲您正在將值賦給isVowel。如果你想比較需要'==',但是它幾乎是一個無限循環,因爲你從不將它設置爲false。 – scrappedcola

+0

我剛剛意識到這兩個,並修復它們(只是更新它),但它仍然無法正常工作。 –

+1

提煉邏輯,只是檢查字符,如果它是一個元音繼續,否則走出循環,最後比較當前計數與最大計數,如果更大然後改變最大否則繼續,下一個字 –

回答

0

您在第二個while循環中存在缺陷,您正在迭代單詞。設置n = 1和計數器= 0會在找到下一個字母爲元音時導致無限循環。它在同一個字母上無限地迭代。下面是更新的代碼段(僅邏輯更新):

while (fileIn.hasNext()) 
{ 
    word = fileIn.next(); 
    String lowercase = word.toLowerCase(); 
     char[] wordChar = word.toCharArray(); 
     int i = 0; 
     int counter = 0; 
     while (i < lowercase.length()) { 
      if ((wordChar[i] == 'a') || (wordChar[i] == 'e') || (wordChar[i] == 'i') || (wordChar[i] == 'o') 
        || (wordChar[i] == 'u')) { 
       counter++; 
      } else { 
       i++; 
       continue; 
      } 
      i++; 

     } 
     if (counter > maxVowelString) { 
      maxVowelString = counter; 
      maxVowelWord = lowercase; 
     } 
} 
    System.out.println("The word in this file with the most consecutive vowels is " + maxVowelWord + "."); 
    System.out.println("It has " + maxVowelString + "vowels."); 
0

首先,如果(fileIn.hasNext())是符合而wrong.Replace它(fileIn.hasNext())。這是因爲當你從文件中讀取時你不知道它什麼時候結束,所以這個while循環將檢查你的文件是否有下一個單詞..注 - 當你調用hasNext()從文件讀取,否則你將永遠有一個無限循環這只是一個通用信息,因爲您正在閱讀文件(word = fileIn.next()),因此沒有問題)。

其次,看這同時LOOP-

while (isVowel == true) { counter = 0; int n = 1; if ((wordChar[i+n] == 'a') || (wordChar[i+n] == 'e') || wordChar[i+n] == 'i') || (wordChar[i+n] == 'o') || (wordChar[i+n] == 'u')) { isVowel = true; counter++; } else isVowel = false; n++; }

現在假設 「排隊」 一詞-the第一,如果條件爲真,當n = 1;然後反++;循環再次運行和現在爲n = 2如果條件滿足等等,直到遇到'i'的最後一個元音。現在,相應地我的值是什麼(只是看到它)....所以,要使它正確,這必須是下面的循環...

`while (isVowel == true) 
     { 
      counter = 0; 
      int n = 1; 
      if ((wordChar[i+n] == 'a') || (wordChar[i+n] == 'e') || wordChar[i+n] == 'i') || (wordChar[i+n] == 'o') || (wordChar[i+n] == 'u')) 
      { 
       isVowel = true; 
       counter++;i++; 
      } 
      else{ 
       isVowel = false; 
       i++;continue; 
      } 
      n++; 
     }` 

正如你想從位置開始到你有的位置檢查..

希望這可能會幫助你。