2014-11-08 48 views
0
import java.util.*; 
public class Exam2_2 { 
    public static void main(String[]args) { 
     Random rand = new Random(); 
     int roll = 0; 
     int roll2 = 0; 
     int tries = 0; 

     while((roll % 2 == 0) && (roll2 % 2 == 0)) { 
      roll = rand.nextInt(8) + 1; 
      roll2 = rand.nextInt(8) + 1; 
      System.out.println("(" + roll + ", " + roll2 + ")"); 
      tries++; 
     } 
     System.out.println("you won after " + tries + " tries"); 
    } 
} 

我的任务是模拟滚动两个8面骰子,只有两个数字均匀时才停止。我不确定我做错了什么,并尝试了一堆不同的东西,看它是否会按我需要的方式工作。任何意见将不胜感激。谢谢。从随机发生器中打印偶数

+1

你觉得你的'while'语句干什么? – ajb 2014-11-08 02:21:25

+0

如果没有余数,打印出卷轴?这不是它在做什么? – Minnie21 2014-11-08 02:29:20

回答

2

这似乎是一个完美的时间使用do {} while对我来说,有点像

Random rand = new Random(); 
int tries = 0; 
int roll; 
int roll2; 
do { 
    roll = rand.nextInt(8) + 1; 
    roll2 = rand.nextInt(8) + 1; 
    System.out.printf("(%d, %d)%n", roll, roll2); 
    tries++; 
} while ((roll % 2 != 0) || (roll2 % 2 != 0)); // <-- while roll or 
               //  roll2 is odd. 
System.out.println("you won after " + tries + " tries"); 

或者,您可以使用DeMorgan's Law

while (!((roll % 2 == 0) && (roll2 % 2 == 0))); 

即更换((roll % 2 != 0) || (roll2 % 2 != 0)),而NOTroll is even and roll2,甚至)。

+0

@ Minnie21如果您的问题得到解答,请[接受答案](http://meta.stackexchange.com/a/5235/243725)。 – 2014-11-08 03:08:49

0

的问题是在你的while条件:

while((roll % 2 == 0) && (roll2 % 2 == 0)) 

这意味着,虽然roll均匀,roll2也是甚至,它会做的是块内的东西。

但是,你希望它继续循环,而他们都不均匀,并停止时,他们是。

所以,你应该改变你的条件是:

while(!((roll % 2 == 0) && (roll2 % 2 == 0))) // they're NOT both even 

,或者你可以做到这一点,更清晰:

while((roll % 2 != 0) || (roll2 % 2 != 0)) // at least one of them is odd 

这样,病情会false时,他们甚至都,从而停止循环。