2016-04-08 13 views
0

Neuling hier,
Ich habe zwei Variablen, die Zufallszahlen über .Random generieren. Ich möchte, dass sie weiterrollen, bis beide Variablen gleichzeitig zwei verschiedene Werte erzeugen. Daher verwende ich while Schleife mit && für diesen Zweck. Wie ich verstanden habe, kann man mich korrigieren, wenn ich falsch bin, while ((diceRolled1 != 5) && (diceRolled2 != 4)) die Linie als übersetzt, Walzen halten, bis die Werte von diceRolled1-5 nicht gleichUNDdiceRolled2ist bis 4 nicht gleich. Aber das Programm endet, wenn eine Variable mit ihrem Wert übereinstimmt (diceRolled1 = 5 ODER diceRolled2 = 4). Das ist nicht was && soll, oder? Ich habe den Code wie 10-mal ausgeführt, aber nicht ein einziges Mal generiert 5 und 4 zur gleichen Zeit.Java - UND Operator funktioniert nicht

Ich versuchte auch == auf beiden Seiten und jeder Seite, aber in diesem Fall lief das Programm überhaupt nicht, noch gab es irgendeinen Fehler.

Ihre Hilfe wird sehr geschätzt. Danke

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

Antwort

1

Sie bekommen das logische Ergebnis, das Sie beschreiben, aber es war nicht was du erwartest. Insbesondere, wenn eine Ihrer Bedingungen false die logische auswertet und nicht true auswertet. Ich glaube, Sie

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

wollte was whilenicht dice1 gleich 5 und dice2 gleich 4. Und dann, mit De Morgan's Laws, die auch ausgedrückt werden kann als

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

was bedeutet Schleifewhile dice1 ist nicht gleich 5 oder dice2 ist nicht gleich 4.

+0

Danke. Das hat gut funktioniert –

3

Ihre Logik ist falsch. Die Schleife wird fortgesetzt, solange beide Werte nicht übereinstimmen - sobald ein Wert übereinstimmt, wird die Schleife beendet. Wir können Ihre Logik umkehren, um dies zu zeigen:

was logisch entspricht, was Sie haben.

Was Sie wollen, ist dies:

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

, die sagt „Weiter, während eine Variable nicht den gewünschten Wert hat“

+0

Sorry, Ihre Logik ist auch funktioniert auch nicht (kopiert und eingefügt Ihren Code). Es verhält sich genauso wie meines. –

+0

@jalbal Funktioniert, wenn ich es tue: https://ideone.com/FxYvE6 –

+0

Es war nicht hier. Ich habe es viele Male versucht. Aber vielen Dank, dass Sie es versuchen. Wirklich zu schätzen, –

0

Ja, sollte es sein. Das Programm sollte enden, wenn dicerolled entweder 5 oder 4 ist, denn solange es nicht 4 und nicht 5 ist, ist es in der While-Schleife. Es verlässt die while-Schleife, wenn nur der Wert 4 oder 5 ist. Ihre Logik ist also falsch. Es tut uns leid! :) Versuchen:

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

die während führen Sie die Anweisung, bis die Bedingung erfüllt ist. In Ihrem Code ist die Bedingung gegeben durch (diceRolled1! = 5) & & (diceRolled2! = 4). Der Operator & & erfordert, dass alle Operanden wahr sind. Vorausgesetzt, dass Ihre Schleife endet, wenn mindestens einer der Ausdrücke falsch ist.

Um das Programm zu beenden, wenn es 5 generieren und 4 Sie diese verwenden müssen: (! (DiceRolled1 == 5) & & (diceRolled2 == 4))