2017-05-19 18 views
0

我對Java很新,我想知道你是否可以幫助我。這裏是我的代碼:計數字符串中的元音和錯誤的輸出?

public static void main(String[] args) { 

    int vowels = 0; 

    Scanner input = new Scanner(System.in); 

    System.out.println ("Enter a string: "); 
     String string = input.nextLine(); 

    int length = string.length(); 

for (int i = 0; i <= length; i++) { 

    String letter = string.substring(i, ++i); 

    if (letter.equalsIgnoreCase("a")){vowels++;}  
    if (letter.equalsIgnoreCase("e")){vowels++;} 
    if (letter.equalsIgnoreCase("i")){vowels++;} 
    if (letter.equalsIgnoreCase("o")){vowels++;} 
    if (letter.equalsIgnoreCase("u")){vowels++;} 

} 
    System.out.println ("The number of vowels in " + string + " is: " + vowels); 
} 

該數字是關閉的,但我不明白爲什麼。

+0

格式化代碼並提出問題 –

+0

關閉多少?它總是一直錯誤嗎?向我們展示一些示例輸入和相應的輸出。作爲一般性建議,我會嘗試在'for'循環中添加更多'System.out.println()'語句。例如,也許在'String letter ...'這行之後,你可以輸出它正在考慮的那個字母,並且在所有'if'語句之後,你可以輸出它到目前爲止計算的元音數。這可能會引導您找到問題的根源。 – DaveyDaveDave

+0

當問題陳述簡單地說「它不起作用」時,很難提供解決方案。請[編輯]您的問題,以更全面地描述您預期會發生什麼以及與實際結果有何不同。看[問]提示什麼是一個很好的解釋。 –

回答

0

在這裏,這是錯誤的

string.substring(i, ++i) 

,因爲變量已經增加在for循環

所以你基本上是跳過字符的字符串中


實施正確的邏輯,使用正確的數據類型

int length = string.length(); 

    for (int i = 0; i < length; i++) { 
     char letter = string.charAt(i); 
     System.out.println(letter); 
     if (letter == 'a') { 
      vowels++; 
     } else if (letter == 'e') { 
      vowels++; 
     } else if (letter == 'i') { 
      vowels++; 
     } else if (letter == 'o') { 
      vowels++; 
     } else if (letter == 'u') { 
      vowels++; 
     } 

    } 
+0

我這樣做了,但是我得到零元音。 –

+0

它取決於元音的位置,你的邏輯是讓代碼遍歷索引2n + 1的元素 –

+0

,那我該怎麼改變呢? –

0

這裏是另一個解決方案,您可以嘗試:

split方法將字符串分割成String數組。然後在你的循環中它會檢查你的數組中的每一項。

public static void main(String[] args) { 

    int vowels = 0; 

    Scanner input = new Scanner(System.in); 

    System.out.println ("Enter a string: "); 
     String string = input.nextLine(); 

    int length = string.length(); 

    String[] stringArray = string.split(""); 

for (int i = 0; i < length; i++) { //I took out the = sign in your for loop arguments. 

    if (stringArray[i].equalsIgnoreCase("a")){vowels++;}  
    if (stringArray[i].equalsIgnoreCase("e")){vowels++;} 
    if (stringArray[i].equalsIgnoreCase("i")){vowels++;} 
    if (stringArray[i].equalsIgnoreCase("o")){vowels++;} 
    if (stringArray[i].equalsIgnoreCase("u")){vowels++;} 

} 
    System.out.println ("The number of vowels in " + string + " is: " + vowels); 
}