2017-04-13 3 views
0

Ich beende gerade mein Programm, aber ich habe immer noch ein Problem, das ich nicht finden kann, eine Antwort zu finden. Ich habe bereits gestellte Fragen durchgesehen, aber in diesem Fall konnte ich nichts finden, was speziell meine Frage beantwortet. Dies ist ein Programm, mit dem der Benutzer eine Zeichenfolge eingeben kann und dann zählt, wie viele Vokale und Konsonanten usw. und danach der Benutzer eine Option erhält, das Programm zu wiederholen und eine neue Zeichenfolge einzugeben, wenn er y drückt, wird das Programm beendet Er/sie drückt n usw. Das einzige, was nicht funktioniert, ist, wenn der Benutzer y drückt, um das Programm zu wiederholen, dann gibt es aus, dass es 0 Vokale und Konsonanten usw. gibt. Ich weiß, dass es etwas am Anfang meines Codes ist wo ich zB int consonant_count = 0 habe, kann ich einfach nicht herausfinden, was ich bewegen soll und wohin ich es bewegen soll. Ps. Dies sollte nicht als Duplikat gekennzeichnet werden, da ich nicht wusste, dass nextLine das Problem war. Hier ist der Code:Java, Die Schleife beginnt nicht vom Anfang des Programms

import java.util.Scanner; 
public class loop2 
{ 
    public static void main (String[] args) 
    { 
     Scanner inputReader = new Scanner (System.in); 
     char result='y'; 

     do { 
      // ’Nytto’-kod: 
      int vowels_count = 0; 
      int consonents_count = 0; 
      int charachters_count= 0; 
      System.out.println("Skriv in en text"); 
      String str = inputReader.nextLine(); 
      String str2 = str.toLowerCase(); 
      char[] chr = str2.toCharArray(); 

      for(int i=0;i<chr.length;i++) 
      { 
       if(chr[i] == 'a' || chr[i]== 'e' || chr[i] == 'i' || chr[i] == 'o' || chr[i] == 'u') 
        vowels_count++; 
       else if(chr[i] == '-' || chr[i] == '!' || chr[i] == '?' || chr[i] == ',' || chr[i] == '.' || chr[i] == ':' || chr[i] == ';') 
        charachters_count++; 
       else 
        consonents_count++; 
      } 

      System.out.println("Antalet vokaler:"+vowels_count+ " "+"Antalet konsonanter:"+consonents_count+" "+"Antalet interpunktionstecken:"+charachters_count++); 
      // Kod f ̈or hantering av repetition 
      System.out.println ("För att upprepa: Skriv y"); 
      System.out.println ("För att avsluta: Skriv n"); 
      String repeat=inputReader.next();// H ̈amta anv ̈andarens svar. 
      result=repeat.charAt(0); 
      if(result=='y') 
      { 
       continue; 
      } 
      else if(result !='y' && result !='n') 
      { 
       System.out.println("Du får bara skriva y eller n, försök igen!"); 
       result='y'; 
      } 
      else 
      { 
       System.out.println ("Klart."); 
       inputReader.close(); 
      } 

      } 
     while (result == 'y'); // Observera semikolon! 

    } 
} 
+0

ich möchte auch hinzufügen, dass das gleiche passiert, wenn die Benutzereingabe gibt oder n, dann sollten sie eine Nachricht erhalten, dass sie es erneut versuchen sollen und dann sollte sich das Programm wiederholen. – mackanmorre

+0

"aeiou" .indexOf (z) <0 besser für Vokal zu testen, idem für den zweiten Test – azro

Antwort

0

Sie sollten die nextline() verwenden, wenn eine Eingabe vom Benutzer zu lesen, diese packt alles, einschließlich der Zeilenende-Zeichen ‚\ n‘, das ist das, was nach dem nächsten links über gets() rufen und dann nextline() packt die ‚\ n‘, die Sie die Zählungen von 0, 0 für Vokale und consonents etwas anderes als y

Scanner inputReader = new Scanner (System.in); 
    char result='y'; 
    while(result == 'y') 
    { 
     // ’Nytto’-kod: 
     int vowels_count = 0; 
     int consonents_count = 0; 
     int charachters_count= 0; 
     System.out.println("Skriv in en text"); 
     String str = inputReader.nextLine(); 
     String str2 = str.toLowerCase(); 
     char[] chr = str2.toCharArray(); 

     for(int i=0;i<chr.length;i++) 
     { 
      if(chr[i] == 'a' || chr[i]== 'e' || chr[i] == 'i' || chr[i] == 'o' || chr[i] == 'u') 
       vowels_count++; 
      else if(chr[i] == '-' || chr[i] == '!' || chr[i] == '?' || chr[i] == ',' || chr[i] == '.' || chr[i] == ':' || chr[i] == ';') 
       charachters_count++; 
      else 
       consonents_count++; 
     } 

     System.out.println("Antalet vokaler:"+vowels_count+ " "+"Antalet konsonanter:"+consonents_count+" "+"Antalet interpunktionstecken:"+charachters_count++); 
     //wrap your play again logic in another do/while where you 
     // ask for y or n until they enter either one 
     do { 
      System.out.println ("För att upprepa: Skriv y"); 
      System.out.println ("För att avsluta: Skriv n"); 
      String repeat=inputReader.nextLine();//read the entire next line <---- 
      result=repeat.charAt(0); 
      if(result=='y') 
      { 
       continue; 
      } 
      else if(result !='y' && result !='n') 
      { 
       System.out.println("Du får bara skriva y eller n, försök igen!"); 
      } 
      else 
      { 
       System.out.println ("Klart."); 
       inputReader.close(); 
      } 
     } while (result !='y' && result !='n'); 
    } 
+0

Vielen Dank! Das funktioniert perfekt, wenn ich y drücke. Aber wenn ich etwas anderes als y oder n drücke, wiederholt es das Programm ab wann der Benutzer eine Zeichenkette eingeben sollte, aber es sollte sich wiederholen und den Benutzer auffordern, y oder n einzugeben. Weißt du, was ich dort ändern kann? – mackanmorre

+0

hinzugefügt eine weitere tun/Weile zu helfen mit Fragen, bis der Benutzer etwas gültiges @mackanmorre –

+0

Vielen Dank! – mackanmorre

Verwandte Themen