有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

方法中的java布尔值未正确返回(数组形式参数)

我正在尝试用简单的java编写一个CEELO程序。我只是在学习。然而,当我到达我的即时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;
  }
}

共 (2) 个答案

  1. # 1 楼答案

    编写布尔方法的更好方法是

    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;
    }
    

    但在你的情况下,你的else后面有一个;。固定版本:

      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;
        }
    
  2. # 2 楼答案

    在其他情况下去除分号;应该是别的

    我想原因是

    instantW = false;被视为单独的语句,而不是else块的一部分。这就是为什么instantW总是被指定为false并返回false

    最好使用{}来定义block,即使它们是单行程序。这是我的偏好

    正如Greg Hewgill所建议的,使用单语句instantW = die[0] > 2 && die [1] > 2 && die[2] > 2;比if/else更好