0

プログラムに取り組んでいるときに、実行時の問題が発生しました。このプログラムは機能しますが、私が映画を選択して評価した後は、平均評価を表示し、最初に戻ってユーザーに別の映画を選択させるようになっています。代わりに、デフォルト (else ステートメント) に移動します。その後、ユーザーは別の映画を選択できます。何度も書き直そうとしましたが、それでもこの問題が表示され続けます。何が間違っていますか? どうすれば修正できますか?

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();
    }
}
4

1 に答える 1

0

問題は、nextDouble()数字は読み取れるが、次の改行は読み取れないことです。たとえば、評価を読んだ後に への呼び出しを追加するかnextLine()、 に置き換えます。nextDouble()Double.parseDouble(s1.nextLine())

別の注意点として、ソース コードに存在しない書式設定以外にもいくつか問題があります。最も重要なのは、スタック スペースが不足して最終的にクラッシュするまでプログラムが終了しないことです。これが学校の課題である場合は、おそらくそれも修正する必要があります。

于 2013-04-07T16:29:06.963 に答える