2015-10-07 1 views
0

J'ai un problème avec le code suivant. Il est supposé poser à l'utilisateur une série de questions sur les résultats des tests des étudiants et retourner le score moyen des tests, cette partie fonctionne bien. Mon problème est que je suis supposé utiliser un "while-loop" qui va exécuter le programme, puis demander à l'utilisateur s'il veut que le programme se termine. Si elles répondent "non", alors il devrait redémarrer et demander un nouveau jeu de résultats, etc.Comparaison de chaînes dans une boucle Do-While

Lorsque j'essaie d'exécuter le programme, il fonctionne correctement jusqu'à la partie où il est supposé redémarrer. Après avoir imprimé la moyenne, il me demandera si je veux fermer le programme, mais il ne me permettra pas de taper quoi que ce soit. C'est comme si le programme se terminait par lui-même.

J'ai fait quelques commentaires autour de la boucle while expliquant ma logique car je pense que c'est là que le problème sera.

import java.util.Scanner; 
import java.text.DecimalFormat; 
import java.text.NumberFormat; 
public class testScores { 
    public static void main(String[] args) { 
     NumberFormat formatter = new DecimalFormat("####.##"); 
     Scanner keys = new Scanner(System.in); 
// Initialize endProgram to "no" 
     String endProgram = "no"; 
// Declare there's going to be a string called end 
     String end; 
     double totalScore = 0; 
     double averageScore = 0; 
     do { 
// Do all of this now before you check anything 
      int number = getNumber(keys); 
      totalScore = getScores(number, keys, totalScore); 
      averageScore = getAverage(totalScore, number, averageScore); 
      printAverage(averageScore, formatter); 
      System.out.println("Do you want to end the program?"); 
      end = keys.nextLine(); 
// Now check if end and endProgram contain the same string 
     } while (end.equals(endProgram)); 
// Apparently not 
    } 
     public static int getNumber(Scanner keys) { 
     System.out.println("How many students took the test?"); 
     int number = keys.nextInt(); 
     return number; 
    } 
    public static double getScores(int number, Scanner keys, double totalScore) { 
     for(int counter = 1; counter <= number; counter++) { 
      System.out.println("Enter their score."); 
      double score = keys.nextDouble(); 
      totalScore = totalScore + score; 
     } 
     return totalScore; 
    } 
    public static double getAverage(double totalScore, int number, double averageScore) { 
     averageScore = totalScore/number; 
     return averageScore; 
    } 
    public static void printAverage(double averageScore, NumberFormat formatter) { 
     System.out.println("The average is " + formatter.format(averageScore)); 
    } 
} 

J'ai essayé quelques choses différentes comme l'utilisation d'un certain temps au lieu d'un do-temps, et la mise hors circuit « fin » pour « FinProgramme » pour avoir vérifier « FinProgramme » après la réinitialisation de sa valeur, toutes avec Sans succès. Si quelqu'un pouvait m'aider avec cela, ce serait grandement apprécié.

+0

Vous voulez probablement regarder cette [question et réponse] (http://stackoverflow.com/questions/26446599/how-to-use-scanner-to-correctement-read-user-input-from-system-in-and-act-on-it) ainsi que pour une solution complète et complète d'utilisation de 'java.util.Scanner' correctement. –

Répondre

-1

Vous devriez essayer quelque chose le long de cette ligne. L'essentiel est que - le do-while est faux ici parce qu'il vérifie contre une chaîne non existant:

String end = ""; 
    /* rest of variables */ 

     while (!(end.equals(endProgram))) { 
// Do all of this now before you check anything 
      int number = getNumber(keys); 
      totalScore = getScores(number, keys, totalScore); 
      averageScore = getAverage(totalScore, number, averageScore); 
      printAverage(averageScore, formatter); 
      System.out.println("Do you want to end the program?"); 
      end = keys.nextLine(); 
// Now check if end and endProgram contain the same string 
     }