-2

私はブラックジャックゲームでの金銭的損失のコンピューターシミュレーションを作成しようとしています。ただし、プロンプトの1つにゼロ未満の値を入力すると、プログラムはゼロ未満について警告する前に他のすべてのプロンプトを実行する必要があるというバグが発生しています。

何度も何度も同じ正確なelseステートメントをそれぞれに配置することなく、ゼロ未満の値についてすぐに警告する方法はありますか?

private void menu()
{
    boolean NonNumeric=false;
    //This is so a different exception is thrown for the minimum stakes since it's a float.
    boolean isDecimal=false;
    while(getRounds()<=0 || getPlayers()<=0 || getStakes()<=0 )
    {
        try
        {
            Scanner input = new Scanner(System.in);
            if(getRounds()<=0)
            {
                System.out.println("Enter number of rounds.");
                setRounds(input.nextInt());
            }
            if(getPlayers()<=0)
            {
                System.out.println("Enter number of players.");
                setPlayers(input.nextInt());
            }
            if(getStakes()<=0)
            {
                System.out.println("Enter minimum stakes.(Note: All players bet minimum only)");
                isDecimal=true;
                setStakes(input.nextFloat());
            }

        }

        catch (InputMismatchException e ) //In case some idiot enters a letter or symbol.
        {
            //This if statement is so that a different message comes if the invalid entry is a float.
            if(isDecimal==true)
            {
                System.out.println("Entry must be a number. Not a letter or symbol. Try Again.\n");
            }
            else
            {
                System.out.println("Entry must be a whole number. Not a letter, decimal, or symbol. Try Again.\n");
            }
            /*This boolean is so that the below if statement does not run if the user enters a letter
            since the integer defaults back to a 0 on exception.*/
            NonNumeric = true;
        }
        if(getRounds()<=0 || getPlayers()<=0 || getStakes()<=0)
        {
            System.out.println("Number must be greater than 0.\n");
        }
    }
}
4

2 に答える 2

1

モジュール化する。入力を受け取り、条件を満たしている場合にのみそれを受け入れるメソッド(またはクラス)を作成します。例えば

 private int myIntGetter(String caption, boolean forcePositive) {
    System.out.println(caption);
    Scanner input = new Scanner(System.in);
    int intValue = input.nextInt();
    while ((forcePositive) && (intValue <=0)) {
      System.out.println("Number must be greater than \0");
      System.out.println(caption);
      intValue = input.nextInt();
    }
    // here intValue is valid
    return intValue;
  }
于 2012-12-26T23:59:01.540 に答える
0

ユーザーに親切にすることに関心がない場合:

do{
   System.out.println("Enter number of rounds.  Rounds must greater than zero.");
   setRounds(input.nextInt());
}while( getRounds()<=0);

ユーザーが入力する必要があるものごとにそれを行うことができます。早くて汚いです。

于 2012-12-26T23:57:23.213 に答える