2016-09-25 82 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) 

將因爲全面評估所有的運行速度較慢,但在語義上是相同的。