0

わかりましたので、私はJavaが初めてです。
私は長い間放置していたプロジェクトのために、スコア計算機を設計しています。それでも、私自身の知識のために、これを行う方法を知りたいです。

プログラムは、サイコロを振るように要求し、それを各プレーヤーの前のサイコロに追加することになっています。
while ループでこれを達成できると思っていましたが、ループを通過するたびに、変数が現在のロールにリセットされます。そのため、合計を取得することはできません...

以下はいくつかのコードです:

    static int players;
    static String p1;
    static String p2;
    static String p3;
    static String p4;
    static int maxScore;
    static int roll1;
    static int roll2;
    static int roll3;
    static int roll4;
    static int total1;
    static int total2;
    static int total3;
    static int total4;
    public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    System.out.print("Enter number of players: ");
    players=keyboard.nextInt();
    System.out.print("Enter Maximum Score: ");
    maxScore=keyboard.nextInt();
    if(players==2){                    //will add more ifs when i get the code right
        System.out.println("Please enter players names.");
        System.out.print("Player 1: ");
        p1=keyboard.next();
        System.out.print("Player 2: ");
        p2=keyboard.next();
        System.out.println(p1 + "\t \t " + p2 + "\n"
        + "_______ \t _______ \n" );  //displays scorecard look with players names

        {


        while (total1 < maxScore && total2<maxScore) { 
        //scorecard quits when maxScore is reached by either player
        int roll;
        total1=(roll+roll1); 

        System.out.print("");
        roll=keyboard.nextInt(); //asks for current roll

        System.out.print("\n"+"_____"+"\n");
        System.out.print(roll+"+"+"\n"+roll1+"\n"+"_____"+"\n"+(roll+roll1)+"\n");
        /*i want this to display total score + last roll and then 
        *total it again on the next line*/
        roll1=roll;
        }
4

3 に答える 3

1

Java でのプログラミングの進歩に関するいくつかのヒント:

  1. 変数rollは何の役にも立ちません。roll1などは、各プレーヤーの最後のロールを保存します。

  2. 可能であれば、変数を初期化します。デフォルト値に依存することは避けるべきです。学習するにつれて問題が発生する可能性があるためです (NullPointerExceptionいつか訪問します)。

  3. あなたのループでは、あなたが持っていましたtotal1=(roll+roll1);。これは間違っています。変数 、total1rollroll1プログラムがこの時点に到達するまでに初期化されていません。それらは整数であるため、(静かに) 0 に初期化されるためtotal1、この時点で 0 が生成されますが、これではあまり効果がありません。この後、ロールの取得に進みます。逆の方法を試してみてください。最初にロールしてから合計します。

  4. Java は初めてだとおっしゃいましたが、将来のある時点で、この同じプログラムを配列で実装することを検討するかもしれません。これにより、今書いた繰り返しコードの多くが節約されることに気付くでしょう。

要約とコード ガイドラインへの変換 (2 人用):

public class MyScoreCalculator {
    static String p1 = "";
    static String p2 = "";
    static int maxScore = 0;
    static int roll1 = 0;
    static int roll2 = 0;
    static int total1 = 0;
    static int total2 = 0;

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        // Dialogue to get data...
        // Display scorecard look with players names

        while (total1 < maxScore && total2 < maxScore) { 
            //scorecard quits when maxScore is reached by either player
            roll1 = keyboard.nextInt(); // ask for current roll

            System.out.println(total1 + "+");
            System.out.println(roll1);
            System.out.println("_____");
            System.out.println(roll1 + total1);

            total1 = total1 + roll1;

            // Do the same for next player.
        }
    }
}
于 2013-04-15T21:45:53.347 に答える
0

total1 の計算はtotal1 += roll、新しいロール入力の後に行う必要があります。また、roll1 が最後のロールを表す場合は、それに応じて変数に名前を付けると、はるかに読みやすくなります。

多くのプレーヤーがいるので、概念を抽象化し、入力を「会計」から分離するようにしてください。たとえば、合計と最後の入力 (およびプレーヤーの名前) を保持する PlayerScore クラスを作成し、最後の入力の追加と保存、および情報の整形出力を処理するメソッドを使用できます。その後、PlayerScore のコレクションを取得して反復し、現在のロールを確認して情報を更新できます。

于 2013-04-15T21:51:52.507 に答える