【问题标题】:Writing a conditional statement编写条件语句
【发布时间】:2017-02-03 04:45:27
【问题描述】:

我是一名学习 Java 的学生,并且被困在作业问题的最后一部分。我需要编写一个条件语句来打印掷出的骰子是否是 Yahtzee(所有五个骰子彼此相等)。我无法弄清楚如何做到这一点,因为我使用的是整数而不是布尔值。我知道我不能将 int 转换为布尔值,到目前为止,这种转换是我知道如何更改变量的唯一方法。任何帮助都将不胜感激,因为实现我所寻找的方法已经超出了我目前所能理解的范围。 这就是我所拥有的,问题出在倒数第二行。

import java.util.Random;

public class FiveDice_JLR
{
   //-----------------------------------------------------------------
   //  Generates random numbers in various ranges.
   //-----------------------------------------------------------------
   public static void main(String[] args)
   {
      Random generator = new Random();
      int die1, die2, die3, die4, die5;

      die1 = generator.nextInt(6)+1;
      System.out.println("Die 1: " + die1);

      die2 = generator.nextInt(6)+1;
      System.out.println("Die 2: " + die2);

      die3 = generator.nextInt(6)+1;
      System.out.println("Die 3: " + die3);

      die4 = generator.nextInt(6)+1;
      System.out.println("Die 4: " + die4);

      die5 = generator.nextInt(6)+1;
      System.out.println("Die 5: " + die5);


      **if(die1==die2&==die3==die4&==die5&&);**
      {
      System.out.println("Yahtzee!!!!");
      }

   }

【问题讨论】:

  • if(die1==die2&==die3==die4&==die5&&); 有语法错误。不要在末尾添加;,并删除最后一个&&。除此之外,您应该使用&& 而不是&
  • 我重新打开了这个问题,因为发布的代码比单独覆盖的重复代码有更多的错误;虽然它仍然属于错字类别。相关:stackoverflow.com/questions/5564410/difference-between-and

标签: java conditional


【解决方案1】:

如果你只使用&,那就是按位与,因此它会比较所有数字的位。你要的是&&,是逻辑与:

if(die1 == die2 && die2 == die3 && die3 == die4 && die4 == die5) {
    // Something here...
}

另请注意,每个 && 运算符就像 == 运算符一样,需要 2 个操作数才能正确比较


假设所有值都是正数,另一种检查所有数字是否相等的方法是将它们全部相加并检查总和是否等于 5 乘以其中一个值。

if((die1 + die2 + die3 + die4 + die5) == die1 * 5) {
    // Something here...
}

这是做同样的事情并且更短,但容易出错,因为您将来可能决定生成负数(出于某种原因),或者决定使用更多骰子而忘记将5更改为适当的数字等。一般情况下,只要坚持第一个就行了

【讨论】:

  • 在这种情况下,操作数是布尔值,所以 & 是一个布尔 AND。
  • && 是 AND 的短路版本;这是正确的使用方法。写的答案是正确的。
  • @duffymo & 和 && 都是正确的。这个答案没有发现问题,并且错误地描述了 OP 代码的操作。
  • 你们真的在争论这个吗?你把新手弄糊涂了。是&& 而不是&,留给新人,这样一个简单的例子。
  • 非常感谢您的帮助。特别感谢 ShadowGod,因为在这个级别上,所有的 cmets 都让我感到困惑。希望有一天我能和大家一起跟随!再次感谢。
【解决方案2】:

您要查找的语句是

if(die1==die2 && die2==die3 && die3==die4 && die4==die5)

或者,为了 @smac89 和 &duffymo 的利益,一个带有 & 的版本:

if(die1==die2 & die2==die3 & die3==die4 & die4==die5)

由于完全评估所有内容,运行速度会变慢,但在其他方面在语义上是相同的。

【讨论】:

    【解决方案3】:

    有两个运算符对于检查所有骰子的值是否相同很重要:条件与运算符 (&&) 和相等运营商 (==)。 Java documentation 包含一些关于它们是什么以及如何使用它们的详细信息。

    有几件事情要记住这些。这两个运算符都是 二元 运算符。它们对两个操作数进行操作。例如a == ba 的值与 b 进行比较。同样,如果ab 都是true,则a && b 的计算结果为true

    当然,当我们想要比较两个以上操作数的值时,这会带来挑战。假设我们有三个变量,abc。我们如何检查它们是否都具有相同的值? (为简单起见,我们假设它们都是原始类型)。

    我们知道如何检查ab 是否相同:a == b

    我们还知道如何检查bc 是否相同:b == c

    如果两者都为真,那么通过transitive property of equality,我们知道a也必须等于c。我们如何检查单个语句中的两个条件?当然,使用条件 AND 运算符:

    a == b && b == c
    

    这是一个只有三个变量的简单示例,但这可以扩展到任意数量的变量(例如,5 个骰子的值)。试一试,看看你是否可以使用这两个运算符让它工作。

    【讨论】:

    • 感谢您的解释,它真的为我阐明了这个概念。如果你愿意,你可以教这个。你的解释比我认识的任何教授都好。
    • @JenRut 所以这是你应该接受的答案。不要接受术语不好的答案。这里&运算符的正确名称是Boolean logical operator
    猜你喜欢
    • 1970-01-01
    • 2020-11-11
    • 2018-12-17
    • 2018-10-19
    • 2011-08-08
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多