2016-10-20 1 views
0

Ich bin neu in Schleifen und ich habe bereits eine for-Schleife codiert, die den Benutzer auffordert, eine Phrase einzugeben, und die for-Schleife gibt aus, wie viele Leerzeichen, a's, e's, s's und t's es gibt. Ich muss eine while-Schleife machen, die es dem Benutzer erlaubt, "quit" einzugeben, um die Schleife zu beenden. Ich bin auch neu beim Lernen zu wechseln, um die Buchstaben auszudrucken. Ich habe bereits versucht, mit meinem Code zu experimentieren, um meine Fehler (entweder eine laufende Schleife oder keine Ergebnisse) für über eine Woche zu beheben. Hier ist mein Code unten und danke im Voraus.Wie erstelle ich eine while-Schleife um eine for-Schleife, mit der der Benutzer die Schleife beenden kann?

import java.util.Scanner; 
public class Count 
{ 

public static void main (String[] args) 
{ 

    Scanner scan = new Scanner (System.in); 
    String phrase; // a string of characters 
    int countBlank; // the number of blanks (spaces) in the phrase 
    int i = 0; 
    char ch;   // an individual character in the string 
    String quit = "quit"; 
    System.out.println(); 
    System.out.println ("Character Counter"); 
    System.out.println(); 

    System.out.print ("Enter a sentence or phrase (quit to quit): "); 
    phrase = scan.nextLine(); // read input Scanner 
    int length = phrase.length();  // the length of the phrase 

    countBlank = 0; 
    int countA = 0; 
    int countE = 0; 
    int countS = 0; 
    int countT = 0; 

    //I am not sure how to set up the start of the while loop 
    //while (!phrase.equals("quit")){ 
    //while (phrase != "quit"){ 

    for (i = 0; i < length; i++){ 
     ch = phrase.charAt(i); 
     if (ch == (' ')) 
      countBlank++; 
     switch (ch) 
     { 
     case 'a': case 'A': countA++; break; 
     case 'e': case 'E': countE++; break; 
     case 's': case 'S': countS++; break; 
     case 't': case 'T': countT++; break;  
     } 
    } 
    System.out.println(); 
    System.out.println ("Number of blank spaces: " + countBlank); 
    System.out.println(); 
    System.out.println ("Number of a's: " +countA); 
    System.out.println ("Number of e's: " +countE); 
    System.out.println ("Number of s's: " +countS); 
    System.out.println ("Number of t's: " +countT); 
    } 
} 

Ausgang:

Character Counter 

Enter a sentence or phrase (quit to quit): AEST aest 

Number of blank spaces: 1 

Number of a's: 2 
Number of e's: 2 
Number of s's: 2 
Number of t's: 2 

Antwort

4

Sie auf dem richtigen Weg sind, aber Sie müssen den Satz noch einmal lesen, sobald der Prozess abgeschlossen ist damit die while-Schleife funktioniert. Andernfalls wird es eine Endlosschleife sein. Hier sind ein paar Änderungen, die ich gemacht habe:

while (!phrase.equals("quit")){ 

     for (i = 0; i < length; i++){ 
      ch = phrase.charAt(i); 
      if (ch == (' ')) 
       countBlank++; 
      switch (ch) 
      { 
      case 'a': case 'A': countA++; break; 
      case 'e': case 'E': countE++; break; 
      case 's': case 'S': countS++; break; 
      case 't': case 'T': countT++; break;  
      } 
     } 
     System.out.println(); 
     System.out.println ("Number of blank spaces: " + countBlank); 
     System.out.println(); 
     System.out.println ("Number of a's: " +countA); 
     System.out.println ("Number of e's: " +countE); 
     System.out.println ("Number of s's: " +countS); 
     System.out.println ("Number of t's: " +countT); 
     phrase =scan.nextLine(); //read next phrase from user to continue. 
     } 
+0

Wow das war wirklich einfach. Ich habe es tatsächlich versucht, aber ich habe es an die falsche Stelle gesetzt. Danke –

+0

Ich versuchte, meinen Code zu laufen, aber sobald ich einen Ausdruck eingab und es die Resultate druckte, und wenn ich einen anderen Ausdruck eintrug, tat es nicht irgendwelche Resultate druckten –

+1

Arbeitet gut! Ich habe es getestet. Hast du meinen Code kopiert? –

1

Verwenden Sie diese nach dem phrase = scan.nextLine();

if(phrase.equalsIgnoreCase("quit")){ return; }

+0

Ja, wir können 'brechen' in switch-Anweisung verwenden. Aber ich glaube, dass das frühere Bestehen eine redundante Ausführung der for-Schleife vermeiden kann. –

Verwandte Themen