2016-09-25 81 views
3

我是一名学习Java的学生,被困在作业问题的最后部分。我需要写一个条件语句来打印掷骰子是否是Yahtzee(所有五个骰子相等)。我不知道如何做到这一点,因为我使用ints而不是布尔值。我知道我不能将一个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!!!!"); 
     } 

    } 
+1

'if(die1 == die2&== die3 == die4&== die5 &&);''有语法错误,不要在末尾放一个';'并删除最后一个'&&'除此之外,你应该使用''&&代替'&' – Aloso

+0

我重新打开了这个问题,因为贴码具有比单独覆盖重复了很多错误,但它仍在错字类别属于相关:。http://stackoverflow.com /问题/ 5564410 /差之间和 –

回答

2

有两家运营商,这将是重要的检查,所有你的骰子的值是相同的:条件AND运算&&)和等于运营商(==)。 Java documentation包含这些内容的一些好的细节,以及如何使用它们。

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

当然,当我们想要比较两个以上操作数的值时,这提出了一个挑战。假设我们有三个变量:a,bc。我们如何检查它们都具有相同的价值? (为了简单起见,我们假定它们都是原始类型)。

我们知道如何检查ab是否一样:a == b

我们也知道如何检查bc是否一样:b == c

如果这些都是真的,那么,由transitive property of equality,我们知道a也必须等于c。我们如何在一个陈述中检查两个条件?使用条件和操作,当然:

a == b && b == c 

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

+1

谢谢你的解释,它真的为我澄清了这个概念。如果你想要,你可以教这个。你的解释比我所知道的任何教授都要好。 – JenRut

+0

@JenRut所以这是你应该接受的答案。不要接受术语不佳的答案。这里的'&'操作符的正确名称是[布尔逻辑运算符(http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.2)。 – EJP

5

如果你只使用&,也就是按位,因此它所有的号码的位进行比较。你想要的是&&,这是合乎逻辑AND:

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

还要注意,每个&&操作就像==操作,需要2个操作数恰当地比较


假设所有你的价值观是积极的,另一种检查所有数字是否相等的方法是将它们全部加起来,并检查总和是否等于其中一个值的5倍。

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

这是做同样的事情,是短,但很容易出现错误,因为你可能会在未来决定产生(出于某种原因)正数,或决定使用更多的骰子,忘记更改5以适当的数量,等等。一般来说,只要坚持到第一个

+0

在这种情况下,操作数是布尔值,所以'&'是一个布尔与 – EJP

+0

&&是短路版本;它使用了正确的事情写答案。正确的。 – duffymo

+0

@duffymo都与和&&会是正确的。这个答案并不确定问题和misdescribes的OP代码的运行。 – EJP

1

你正在寻找的语句是

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

或者,@ smac89的和& duffymo的利益,与&版本:

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

将因为全面评估所有的运行速度较慢,但在语义上是相同的。