2013-04-07 2 views
0

Je travaille sur un programme et j'ai rencontré un problème d'exécution. Le programme fonctionne, mais après avoir choisi le film et l'avoir évalué, il est supposé donner la note moyenne et revenir au début et laisser l'utilisateur choisir un autre film. Au lieu de cela, il va à la déclaration par défaut (else). Après cela, il permet à l'utilisateur de choisir un autre film. J'ai essayé de le réécrire plusieurs fois, mais ça continue à montrer ce problème, qu'est-ce que je fais de mal? Comment puis-je le réparer?Programme Java simple

import java.text.DecimalFormat; 
import java.util.Scanner; 


public class movie { 
    Scanner s1=new Scanner(System.in); 
    private String movielist, movie; 
    private double userR; 
    public String pg="rated PG-13", r="rated R"; 
    public String rate="Rate this movie 1-5, 1 being terrible and 5 great"; 
    public String crm1="Score  1 2 3 4 5\n# of Raters 1 3 1 3 12",crm2="Score  1 2 3 4 5\n# of Raters 4 2 4 6 4", crm3="Score  1 2 3 4 5\n# of Raters 3 0 5 5 7"; 
    DecimalFormat userR1=new DecimalFormat("#.#"); 


    public String m1(){ 
     System.out.println("\nChoose one of the following movies\nJurassic Park, Identity Theft, The Dark Night"); 
     movielist=s1.nextLine(); 
     if(movielist.equalsIgnoreCase("Jurassic Park")) 
     { 
      System.out.println("Jurassic Park is "+pg+"\nCritics rated this movie: \n"+crm1+"\n"+rate); 
      userR=s1.nextDouble();System.out.println("With your rating, the average rating for this movie is: "+(userR1.format((82+userR)/21))); 
     } 
     else if(movielist.equalsIgnoreCase("Identity Theft")) 
     { 
      System.out.printf("Identity Theft is "+r+"\nCritics rated this movie: \n"+crm2+"\n"+rate); 
      userR=s1.nextDouble(); 
      System.out.println("With your rating, the average rating for this movie is: "+(userR1.format((68+userR)/21))); 
     } 
     else if(movielist.equalsIgnoreCase("The Dark Night")) 
     { 
      System.out.printf("The Dark Night is "+pg+"\nCritics rated this movie: \n"+crm3+"\n"+rate); 
      userR=s1.nextDouble(); 
      System.out.println("With your rating, the average rating for this movie is: "+(userR1.format((73+userR)/21))); 
     } 
     else 
     { 
      System.out.println("No movie with that name found, make sure your spelling is correct."); 
     } 
     return m1(); 
    } 
} 
+0

Je vais essayer d'ajouter une image de ce qui se passe dès que j'ai plus de réputation. – user2005617

Répondre

0

Le problème est que nextDouble() va lire un numéro, mais pas le retour à la ligne suivante. Ajoutez un appel à nextLine() après avoir lu la note ou remplacez nextDouble() par Double.parseDouble(s1.nextLine()), par exemple. Sur une autre note, mis à part la mise en forme inexistante dans votre code source, il y a quelques autres problèmes, surtout que votre programme ne se termine jamais jusqu'à ce qu'il se bloque finalement parce que vous n'avez plus d'espace dans la pile. . S'il s'agit d'une tâche scolaire, vous devriez probablement essayer de résoudre ce problème également.

+0

Que voulez-vous dire par "appel". Qu'est-ce que c'est ? J'ai remplacé le nextDouble par Double.parseDouble (s1.nextLine()); mais ça me donne une erreur. – user2005617