2016-04-08 2 views
0

новичок здесь,
У меня есть две переменные, которые генерируют случайные числа через .Random. Я хочу, чтобы они продолжали катиться, пока обе переменные не генерируют два разных значения одновременно. Поэтому для этой цели я использую цикл while с &&. Как я понял, пожалуйста, поправьте меня, если я ошибаюсь, линия while ((diceRolled1 != 5) && (diceRolled2 != 4)) переводится как катиться до значения diceRolled1не является равным 5ИdiceRolled2не равна 4. Но программа заканчивается, если любая переменная соответствует ее значению (diceRolled1 = 5 OR diceRolled2 = 4). Это не то, что должно делать &&, верно? Я запускал код как 10 раз, но не один раз он генерировал 5 и 4 одновременно.Java - И оператор не работает

Я также пробовал == с обеих сторон и с обеих сторон, но в этом случае программа не запускалась вообще, и она не давала никаких ошибок.

Ваша помощь будет очень признательна. Thanks

import java.util.Random; 
import static java.lang.System.out; 

public class DiceRoller { 
public static void main(String[] args) { 
    Random dice1 = new Random(); 
    Random dice2 = new Random();  //Removing this doesn't work either 

    int diceRolled1 = 0; 
    int diceRolled2 = 0; 

    while ((diceRolled1 != 5) && (diceRolled2 != 4)) { //& didn't work either 
     diceRolled1 = dice1.nextInt(6) + 1; 
     diceRolled2 = dice2.nextInt(6) + 1; 
     out.println(diceRolled1 + " " + diceRolled2); 
    } 
    out.println("Program ends"); 
} 
} 

ответ

1

Вы получаете логический результат вы описываете, но это не было что вы ожидаете. В частности, когда любое из ваших условий оценивает false логическое и не будет оцениваться до true. Я думаю, что вы хотели

while (!(diceRolled1 == 5 && diceRolled2 == 4)) { 

который whileне dice1 равным 5 и dice2 равным 4. И затем, используя De Morgan's Laws, что также может быть выражен как

while (diceRolled1 != 5 || diceRolled2 != 4) { 

что означает петляwhile Кубик 1 не равен 5 или Кубик 2 не равен 4.

+0

Thanks. Это хорошо работало –

3

Ваша логика неверна. Цикл будет продолжаться до тех пор, пока оба значения не совпадают - как только одно значение совпадает, цикл завершается. Мы можем инвертировать вашу логику, чтобы показать это:

while (!(diceRolled1 == 5 || diceRolled2 == 4)) { 

, что логически эквивалентно тому, что у вас есть.

Что вы хотите, это:

while (diceRolled1 != 5 || diceRolled2 != 4) { 

, который говорит: «Продолжайте, пока любая переменная не имеет требуемое значение»

+0

К сожалению, логика также не работает (скопирован и вставлен ваш код). Он ведет себя так же, как и мой. –

+0

@jalbal Работодатель: https://ideone.com/FxYvE6 –

+0

Этого не было. Я много раз пробовал. Но большое вам спасибо за попытку. Очень ценю это –

0

Да, должно быть. Программа должна заканчиваться, если dicerolled - это 5 или 4, потому что, поскольку это не 4, а не 5, он находится в цикле while. Он выходит из цикла while, если только значение имеет значение 4 или 5. Таким образом, ваша логика неверна. Сожалею! :) Try:

while (!(dicerolled ==4 && dicerolled == 5)) 
1

это время выполнить оператор до тех пор пока условие истинно. В вашем коде условие дано (diceRolled1! = 5) & & (diceRolled2! = 4). Оператор & & требует, чтобы все операнды были истинными. Учитывая это, ваш цикл завершится, когда хотя бы одно из выражений будет ложным.

Чтобы закончить программу, когда она генерирует 5 и 4 вы должны использовать это: (! (DiceRolled1 == 5) & & (diceRolled2 == 4))

Смежные вопросы