1

シンプルでシンプルな Java で cee-lo プログラムを作成しようとしています。私はただ学んでいます。しかしいざ自分の瞬間にたどり着くとw。(テスト用に簡略化しました)常にfalseを返します。理由が分からないようです。正しいデータも表示されますが、比較すると失敗します。

public class ceeLo
{
  public static void main (String [] args)
  {
    Scanner scan= new Scanner (System.in);
    int [] die = new int [3];
    int answer;
    boolean roll = true;
    boolean qualifed;
    boolean instantW;
    boolean instantL;

    do
    {
      System.out.println("Roll the dice?");
      answer = scan.nextInt ();
      if (answer == 0)
        roll= false;
      else
      {
        int i;
        for (i = 0; i < die.length; i++)
        {
          die[i]= rollin();
          System.out.println(diceTxt(die[i]));  
        }

        qualifed = (qualify (die));
        System.out.println("Qualified = " + qualifed);
        instantW = (easyW (die));
        System.out.println("Instant win = " + instantW);
      }
    }
    while (roll);
  }

  // Generate random numbers for the roll
  public static int rollin ()
  {
    Random rand = new Random();
    int die= rand.nextInt(6);
    return die;
  }

  //Check if dice qualify with pair
  public static boolean qualify (int [] die)
  {
    boolean qualify;
    //Pair Qualifying roll
    if (die[0] == die[1] || die[0] == die[2] || die[1] == die[2])
      qualify = true;
    else
      qualify = false;
    return qualify;
  }

  //Check if instant win 
  public static boolean easyW (int [] die)
  {
    boolean instantW;
    // show contents of die [x] for testing
    System.out.println (die[0] + "" + die[1] + "" + die[2]);
    if (die[0] > 2 && die [1] > 2 && die[2] > 2)
          instantW = true;
    else;
      instantW = false;
    return instantW;
  }
}
4

2 に答える 2

7

else の後にセミコロンを削除します。それはちょうど他のものであるべきです

その理由はきっと、

instantW = false;は、else ブロックの一部ではなく、別のステートメントとして扱われています。これが、instantW が常に false に割り当てられ、false を返す理由です。

シングルライナーであっても、{} を使用してブロックを定義することをお勧めします。それは私の好みです。

Greg Hewgill が示唆したように、単一のステートメントを使用instantW = die[0] > 2 && die [1] > 2 && die[2] > 2;すると、if/else よりもうまくいきます。

于 2012-11-01T20:08:00.307 に答える
3

ブールメソッドを記述するより良い方法は、実際には次のようなことをすることです

boolean easyW(int[] die)
{
   return (die[0] > 2 && die[1] > 2 && die[2] > 2);
}

またはさらに良い(より一般的な)

boolean easyW(int[] die)
{
   for(int roll : die)
   {
       if(roll < 2)
       {
          return false;  
       }
   }
   return true;
}

しかし、あなたの場合、あなたには;他の人がいます。修正版:

  public static boolean easyW (int [] die)
    {
        boolean instantW;
      // show contents of die [x] for testing
      System.out.println (die[0] + "" + die[1] + "" + die[2]);
      if (die[0] > 2 && die [1] > 2 && die[2] > 2)
            instantW = true;
         else
            instantW = false;
      return instantW;
    }
于 2012-11-01T20:11:16.733 に答える