2017-01-26 6 views
-1

Ich habe eine Hausaufgabe, die die Vokale in der Zeichenfolge zählen muss. Mein Programm läuft, aber Konsonanten und Leerzeichen werden nicht ignoriert. Gibt es etwas, das mir im Code fehlt?Mein Programm zählt die Vokale nicht

static void main(String[] args) { 
    // TODO Auto-generated method stub 
    boolean stopProgram = false; 
    while(!stopProgram == true) { 
     System.out.println("Enter a Word or \"q\" to end the program: "); // prompt the user for input 
     Scanner wordScanner = new Scanner(System.in); 
     String word = wordScanner.nextLine(); 
     if(!word.equals("q")) { 
      String vowels[] = {"a","e","i","o","u","y","A","E","I","O","U","Y"}; //define upper and lower case vowels 
      int count = 0; 
      for(int i = 0; i < word.length(); i++) { 
       if(String.valueOf(word.charAt(i)).equals(vowels[0]) || 
         String.valueOf(word.charAt(i)).equals(vowels[1])); 
         String.valueOf(word.charAt(i)).equals(vowels[2]); 
         String.valueOf(word.charAt(i)).equals(vowels[3]); 
         String.valueOf(word.charAt(i)).equals(vowels[4]); 
         String.valueOf(word.charAt(i)).equals(vowels[5]); 
         String.valueOf(word.charAt(i)).equals(vowels[6]); 
         String.valueOf(word.charAt(i)).equals(vowels[7]); 
         String.valueOf(word.charAt(i)).equals(vowels[8]); 
         String.valueOf(word.charAt(i)).equals(vowels[9]); 
         String.valueOf(word.charAt(i)).equals(vowels[10]); 
String.valueOf(word.charAt(i)).equals(vowels[11]); 

         count++; 
       } 
      System.out.println(("The Vowel Count is: ") + count); 
      } 


    } 
} 

}

+0

Sie trennen Ihre 'if'-Bedingung mit Semikolon ';' statt oder '||'. Überprüfen Sie das Format Ihres 'if', um sicherzustellen, dass die verschiedenen Bedingungen richtig getrennt sind und dass die Bedingungen korrekt eingeschlossen sind (und nach der schließenden Paranthese kein Semikolon haben). – AntonH

+0

Sie können auch durch Ihre Vokale Array mit einer verschachtelten for-Schleife durchlaufen, um es lesbarer zu machen – Treycos

+0

Related: http://StackOverflow.com/A/13734724/1079354; Während es sich wie ein Betrogener anfühlt, hat dein Code Probleme mit seinen eigenen, die es wert sind, sie selbst zu reparieren. – Makoto

Antwort

2

Das ist Ihre if-Anweisung:

if(String.valueOf(word.charAt(i)).equals(vowels[0]) || 
        String.valueOf(word.charAt(i)).equals(vowels[1])); 

Sie brechen die if-Anweisung durch die ; ganz am Ende.

Danach gibt es eine Menge von Aussagen (deren Ergebnis ignoriert wird)

String.valueOf(word.charAt(i)).equals(vowels[1])); 

, die sich nicht mehr in der if-Anweisung sind.

Dann inkrementieren Sie die Zählung mit jeder Iteration - unabhängig von der if, die durch ; unterbrochen wird.

-2

Zuerst sollten Sie Ihren Code ein wenig sauberer machen: Erstellen Sie eine Liste von Vokalen außerhalb Ihrer while, so dass Sie nicht bei jeder Iteration erstellen, dann verwenden Sie vielleicht eine doppelte for-Schleife durch Ihre Registerkarte von Vokalen:

static void main(String[] args) { 
    // TODO Auto-generated method stub 
    boolean stopProgram = false; 
    String vowels[] = {"a","e","i","o","u","y","A","E","I","O","U","Y"}; //define upper and lower case vowels 
    while(!stopProgram == true) { 
     System.out.println("Enter a Word or \"q\" to end the program: "); // prompt the user for input 
     Scanner wordScanner = new Scanner(System.in); 
     String word = wordScanner.nextLine(); 
     if(!word.equals("q")) { 
      int count = 0; 
      for(int i = 0; i < word.length(); i++) { 
       for(int j = 0; j < 12; ++j){ 
        if(String.valueOf(word.charAt(i)).equals(vowels[j]){ 
         ++count; 
         break; 
        } 
       } 
      } 
     System.out.println(("The Vowel Count is: ") + count); 
     } 
    } 
} 
+1

Die doppelte Schleife ist nicht notwendig, und eine Konstante zu verwenden, um über das Array von Vokalen zu schleifen ist auch sehr schlechte Form. – Makoto

+0

Ich habe nicht gesagt, es war schrecklich, aber es ist immer sauberer zu Code Wiederholung als 11 Aufruf der gleichen Funktion zu vermeiden. Und damit hätte es auch @Nathans Problem gelöst :) (da es für '||' keine Verwendung mehr gibt). –

+0

Nein, du verstehst mich falsch. Angenommen, ich beschließe, Y als Vokal zu entfernen. Was denkst du wird mit deinem Code passieren? – Makoto

Verwandte Themen