0

何時間もの調査の後、役立つはずの while ループを思いつくことができました。唯一の問題は、ループしてユーザーに再実行を求めないことです。ゴルフプログラムを何度もループするだけです。誰が何が悪かったのか指摘できますか? 現在初級クラスなので、よく分からないかもしれません。

import java.util.Scanner;

class GolfEM
{ 
    public static void main (String[] args) 
    {
        Scanner kb = new Scanner(System.in);    
        boolean go = true;
        boolean run = true;

        while (go==true)
        {
            while (run)
            {
                System.out.println("Enter par for the hole: ");
                int par = kb.nextInt();
                System.out.println("Enter the number of strokes: ");
                int stroke = kb.nextInt();
                {

                    if (stroke==1)  
                    {
                        System.out.println("hole in one");
                        run=false;
                    }
                    else if (3==par-stroke)
                    {
                        System.out.println("double eagle");
                        run=false;
                    }
                    else if (2==par-stroke)
                    {
                        System.out.println("eagle");
                        run=false;
                    }
                    else if (1==par-stroke)
                    {
                        System.out.println("birdie");
                        run=false;
                    }
                    else if (par==stroke)
                    {
                        System.out.println("par");
                        run=false;
                    }
                    else if (-1==par-stroke)
                    {
                        System.out.println("bogey");
                        run=false;
                    }
                    else if (-2==par-stroke)
                    {
                        System.out.println("double-bogey");
                        run=false;
                    }
                    else if (-3==par-stroke)
                    {
                        System.out.println("triple-bogey");
                        run=false;
                    }
                    else if (-4==par-stroke)
                    {
                        System.out.println("four-over-par");
                        run=false;
                    }
                    else if (-5==par-stroke)
                    {
                        System.out.println("five-over-par");
                        run=false;
                    }
                    else if (-6==par-stroke)
                    {
                        System.out.println("six-over-par");
                        run=false;
                    }
                    else if (-7==par-stroke)
                    {
                        System.out.println("seven-over-par");
                        run=false;
                    }
                    else
                    {
                        System.out.println("Better luck next time");
                        run=false;
                    }
                }
            }
            run=false;
        }
        if (run==false)
            System.out.println("Run again? ");

        char again = kb.next().charAt(0);

        if (again == 'y')
        {
            run=true;
        }
        else if (again == 'n')
        {
            System.out.println("Goodbye.");
            go = false;
        }
        else
        {
            System.err.println("Invalid answer");
        }
    }
}
4

4 に答える 4

0

run内側のループが何のためにあるのか、私にはよくわかりません。一度だけ実行された後run、falseに設定されます。ただし、コードは暫定的なものであり、この部分は後で入力されると想定します。

実際の問題について:プログラムを再度実行するかどうかをユーザーに尋ねる部分はループの外側にあるため、プログラムは無限ループで実行されgoます。そのパート1の「中括弧」レベルを上げるだけで大​​丈夫です。

于 2013-02-22T15:49:22.417 に答える
0

いくつかのヒントを与えることができれば、ここで 2 つの while ループは必要ありません。本当に必要なのは 1 つだけです (たとえば、外側の 'go' ループとしましょう)。

あなたのロジックは次のようになります...

    boolean go = true;
    while (go) {
         // get input...
         // compute the result for this hole...
         // get user input...
         // decide whether to go again (go = false; or go = true;)
    }

中括弧に注意してください。他の人が示唆したように、コードを適切にインデントすることから始めます。

于 2013-02-22T15:38:56.280 に答える