编写条件语句

3

我是一名学习Java的学生,卡在了作业问题的最后一部分。我需要写一个条件语句来打印掷骰子是否是Yahtzee(所有五个骰子都相等)。由于我使用的是整数而不是布尔值,所以我无法解决这个问题。我知道我不能将int强制转换为boolean,到目前为止,这种转换是我知道如何改变变量的唯一方法。由于实现我需要的功能的方法已经超出了我的理解范围,所以任何帮助都将不胜感激。 以下是我的代码,问题出在倒数第二行。

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!!!!");
      }

   }

1
if(die1==die2&==die3==die4&==die5&&);存在语法错误。不要在末尾加上;,并移除最后一个&&。除此之外,你应该使用&&代替& - Aloso
我重新打开了这个问题,因为发布的代码比重复覆盖的代码错误要多得多;尽管它仍然属于错别字类别。相关链接:https://dev59.com/OG035IYBdhLWcg3wMNGW - Jason C
3个回答

5
如果您只使用&,那么它是按位与运算符,因此会比较所有数字的位。您需要的是逻辑与运算符&&
if(die1 == die2 && die2 == die3 && die3 == die4 && die4 == die5) {
    // Something here...
}

请注意,每个&&运算符就像==运算符一样,需要两个操作数进行比较。


假设您的所有值都为正数,另一种检查所有数字是否相等的方法是将它们全部加起来,然后检查总和是否等于其中一个值的5倍。

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

这样做的效果相同且更短,但容易出错,因为您将来可能会决定生成负数(出于某种原因),或者决定使用更多的骰子并忘记将 5 更改为适当的数字等。一般来说,请坚持使用第一个方法。


在这种情况下,操作数是布尔值,因此 & 是布尔 AND。 - user207421
&&是AND的短路版本;这是正确的使用方式。原文答案是正确的。 - duffymo
https://dev59.com/22865IYBdhLWcg3wCqHI. - duffymo
4
你们真的要为这个问题争吵吗?这会让新手感到困惑。这里使用的是 && 而不是 &,对于一个新手来说,这是一个非常简单的例子,就让它保持原样就好了。 - ShadowGod
1
非常感谢您的所有帮助。特别感谢ShadowGod,因为在我这个水平上,所有的评论都让我更加困惑了。希望有一天我能够跟上你们所有人的步伐!再次感谢。 - JenRut
显示剩余7条评论

2
有两个运算符在检查所有骰子的值是否相同时非常重要: 条件 AND 运算符 (&&) 和 等于 运算符 (==)。Java文档中包含了一些很好的细节说明,以及如何使用它们。
这两个运算符都是二元运算符。它们对两个操作数进行操作。例如,a == b 比较 a 的值和 b 的值。同样,a && b 如果 ab 都为 true,则返回 true
当我们想要比较多于两个操作数的值时,这就带来了挑战。假设我们有三个变量:abc。我们如何检查它们的值是否全部相同呢?(为简单起见,我们假设它们都是原始类型)。
我们知道如何检查 ab 是否相同:a == b
我们也知道如何检查 bc 是否相同:b == c
如果这两者都为真,则根据等式的传递性质,我们知道 a 也必须等于 c。如何在单个语句中检查两个条件?当然是使用条件 AND 运算符:
a == b && b == c

这只是一个包含三个变量的简单示例,但可以扩展到任意数量的变量(例如5个骰子的值)。尝试一下,看看是否能使用这两个运算符使其正常工作。


1
谢谢你的解释,它真的为我澄清了这个概念。如果你愿意的话,你可以教授这个知识。你的解释比我所认识的任何一位教授都要好。 - JenRut
@JenRut 所以这就是你应该接受的答案。不要接受术语不当的答案。此处&运算符的正确名称为布尔逻辑运算符 - user207421

1
你要找的语句是:
if(die1==die2 && die2==die3 && die3==die4 && die4==die5)

或者,为了@smac89和@duffymo的方便,这是一个带有&的版本:

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

由于完全计算所有内容,因此运行速度会变慢,但在语义上与原来相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接