2016-02-19 5 views
0

Ok, merci, j'ai compris la boucle de sortie.problème de boucle à la fin du programme, ne peut pas quitter

Maintenant, mon problème est que j'essaie de tester int newScore pour s'assurer que sa valeur est comprise entre 1 et 100. La boucle à mi-chemin fonctionne. Si j'entre une valeur en dehors des paramètres, elle boucle et demande à nouveau. Cependant, lorsque j'entre une valeur dans les paramètres, elle ne rompt pas la boucle et continue jusqu'à la prochaine partie du programme (soit pour demander le prochain score de test, soit pour calculer la moyenne s'il n'y a plus de scores). pour essayer cette boucle:

 do { 
 
      while (scoreValid) { 
 
      while (tv) { 
 
       try { 
 
       System.out.println("Please enter test score # " + counter); 
 
       newScore = Integer.parseInt(scan.nextLine()); 
 
       if (newScore >= 1 && newScore <= 100) { 
 
        scoreValid = true; 
 
        tv = false; 
 
        counter++; 
 
        totalScore = totalScore + newScore; 
 
        break; 
 
       } else { 
 

 
        System.out.println("Sorry, you must enter a number between 1 and 100."); 
 
        tv = true; 
 
        continue; 
 
       } 
 

 
       } catch (Exception e) { 
 
       System.out.println("Sorry, I didn't catch that"); 
 
       continue; 
 
       } 
 
      } 
 
      } 
 
     } while (counter <= numberTests);

Voici le code original ....

/** 
 
* This app will average test scores and tell you what letter grade you received. 
 
* 
 
* @jordan.hawkes 
 
* @1.0 
 
*/ 
 

 
import java.util.Scanner; 
 
public class TestScoreCalculator { 
 
    public static void main(String[] args) { 
 

 
     String first; // First Name entered by user 
 
     String last; // Last Name entered by user 
 
     String newTestAnswer; // answer for entering another test score 
 
     String redoAnswer; // answer to rerun program 
 
     int avg; // Average test score 
 
     int totalScore = 0; // Total Running Test Score 
 
     int newScore; // Test Score Entered by User 
 
     int counter = 1; // Number of Scores Entered 
 
     int testNumber; // Test # counter 
 
     int numberTests = 0; // Number of Tests entered by user 
 
     boolean scoreValid = false; // boolean to validate score  
 
     boolean newTest = false; // boolean to validate entering another test 
 
     boolean redo = false; // boolean to rerun program 
 
     boolean numberTestsValid = false; // boolean to validate number of tests 
 
     boolean test = false; // test boolean to validate exit/rerun 
 

 
     Scanner scan = new Scanner(System.in); 
 

 
     System.out.print("Please enter your first name: "); 
 
     first = scan.nextLine(); 
 

 
     System.out.print("Hello, " + first + ", please enter your last name: "); 
 
     last = scan.nextLine(); 
 

 
     while (redo = true) { 
 
     while (numberTestsValid = true) { 
 
      try { 
 
      System.out.println("Thanks, " + first + ", how many test scores would you like to enter? "); 
 
      numberTests = Integer.parseInt(scan.nextLine()); 
 
      numberTestsValid = true; 
 
      break; 
 
      } catch (Exception e) { 
 
      System.out.println("Sorry, I didn't catch that"); 
 
      continue; 
 
      } 
 
     } 
 

 
     do { 
 
      while (scoreValid = true) { 
 
      try { 
 
       System.out.println("Great, please enter test score # " + counter); 
 
       newScore = Integer.parseInt(scan.nextLine()); 
 
       scoreValid = true; 
 
       counter++; 
 
       totalScore = totalScore + newScore; 
 
       break; 
 
      } catch (Exception e) { 
 
       System.out.println("Sorry, I didn't catch that"); 
 
       continue; 
 
      } 
 
      } 
 
     } while (counter <= numberTests); 
 

 
     testNumber = counter - 1; 
 
     avg = (totalScore/testNumber); 
 

 
     switch (avg/10) { 
 
      case 10: 
 
      System.out.println("Congratulations " + first.charAt(0) + ". " + last + ", you got an A+!"); 
 
      break; 
 
      case 9: 
 
      System.out.println("Congratulations " + first.charAt(0) + ". " + last + ", you got an A!"); 
 
      break; 
 
      case 8: 
 
      System.out.println("Congratulations " + first.charAt(0) + ". " + last + ", you got a B!"); 
 
      break; 
 
      case 7: 
 
      System.out.println("Congratulations " + first.charAt(0) + ". " + last + ", you got a C!"); 
 
      break; 
 
      case 6: 
 
      System.out.println("Congratulations " + first.charAt(0) + ". " + last + ", you got a D!"); 
 
      break; 
 
      default: 
 
      System.out.println("Congratulations " + first.charAt(0) + ". " + last + ", you got an F!"); 
 

 
     } 
 

 
     while (test = true) { 
 
      System.out.println("type r to restart or q to quit"); 
 
      redoAnswer = scan.nextLine().trim().toLowerCase(); 
 
      if (redoAnswer.equals("r")) { 
 
      test = false; 
 
      totalScore = 0; 
 
      counter = 1; 
 
      redo = true; 
 
      break; 
 
      } else if (redoAnswer.equals("q")) { 
 
      test = false; 
 
      redo = false; 
 
      System.out.println("Goodbye!"); 
 
      continue; 
 
      } else { 
 
      System.out.println("Sorry, I didn't catch that. Please type r to restart or q to quit"); 
 
      continue; 
 
      } 
 
     } 
 
     } 
 
    } //end main 
 
} //end class

Répondre

0

bug classique:

while (redo = true) 

attribuetrue à redo et est toujours true, il ne teste pas.

changement qu'il soit

while (redo == true) 

ou mieux:

while (redo) 

la même chose pour d'autres conditions de boucle.

+0

oh, merci beaucoup, wow je ne sais pas comment j'ai manqué cela, mais je l'apprécie et a changé toutes les conditions de la boucle! Merci d'avoir expliqué, donc je sais pas de le faire à l'avenir. J'ai une autre question que je me pose à propos de ... alors quand je demande à l'utilisateur d'entrer un score de test, puis j'interroge la réponse pour s'assurer que c'est un int, est-il un moyen de fixer des limites sur les valeurs qu'ils peuvent entrer? Par exemple, dans un test, je veux seulement des réponses entre 1 et 100. –

+0

Analyser, puis tester, peut-être 'scoreValid = newScore> 0 && newScore <101' ou autre. – Bohemian