Java 不断循环的掷骰子游戏
我正在做Java编程课程分配给我的一项任务,我对Java相当陌生。只要不触发do while语句,程序中的一切都可以正常运行,这时它开始循环失控,说“youroll:7 you lose”Java 不断循环的掷骰子游戏,java,do-while,Java,Do While,我正在做Java编程课程分配给我的一项任务,我对Java相当陌生。只要不触发do while语句,程序中的一切都可以正常运行,这时它开始循环失控,说“youroll:7 you lose” import java.util.Scanner; //Importing the java.util class Scanner public class Craps { private Die die1; private Die die2; public Craps() {
import java.util.Scanner; //Importing the java.util class Scanner
public class Craps {
private Die die1;
private Die die2;
public Craps() {
die1 = new Die();
die2 = new Die();
}
private void rollDice() {
die1.roll();
die2.roll();
}
private int getSum() {
return die1.getNumber() + die2.getNumber();
}
private int getSum2() {
return die1.getNumber() + die2.getNumber();
}
public void playRound() {
rollDice();
int sum = getSum();
int sum2 = getSum2();
System.out.println("You rolled: " + sum);
if (sum == 7 || sum == 11) {
System.out.println("You Win");
}
if (sum == 2 || sum == 3 || sum == 12) {
System.out.println("You Lose");
} else if (sum == 4 || sum == 5 || sum == 6 || sum == 8 || sum == 9 || sum == 10) {
System.out.println("Establishing the point, Re-rolling...");
rollDice();
sum2 = getSum2();
do {
if (sum2 == 7) {
System.out.println("You rolled: " + sum2);
System.out.println("You lose");
}
if (sum2 == sum) {
System.out.println("You rolled: " + sum2);
System.out.println("You win!!!");
}
}
while (sum2 != sum || sum2 != 7);
}
}
public static void main(String[] args) {
Craps game = new Craps();
System.out.println("Welcome to the game of Craps!!!");
System.out.println("Rules: ");
System.out.println("Rolling a 7 or 11 will win you the game");
System.out.println("Subsequently rolling 2, 3, or 12 will lose you the game");
System.out.println("If you roll a 4, 5, 6, 8, or 10 you will 'Establish the point'");
System.out.println("Establishing the point allows you to set a new winning number and reroll");
System.out.println("When you establish the point, the goal is to not roll a 7 and instead roll");
System.out.println("the established number, rolling after establishing a point 7 now will");
System.out.println("result in a loss");
String ans = null;
Scanner scan = new Scanner(System.in);
do {
game.playRound();
ans = scan.nextLine();
}
while (ans.equalsIgnoreCase("Yes"));
}
}
编辑我的模具类
import java.util.Random;
public class Die {
private int number;
private Random generator;
public Die() {
generator = new Random();
roll();
}
public int getNumber() {
return number;
}
public void roll() {
number = generator.nextInt(6) + 1;
}
}
sum和sum2在do/while循环中永远不会更新,因此一旦进入循环,就永远无法退出
do {
if (sum2 == 7) {
System.out.println("You rolled: " + sum2);
System.out.println("You lose");
}
if (sum2 == sum) {
System.out.println("You rolled: " + sum2);
System.out.println("You win!!!");
}
}
while (sum2 != sum || sum2 != 7); // Condition never changes
另一个很好的模式是利用返回短路:
while (true) {
rollBabyRoll();
if (getSum2() == 7) {
// Log
return;
else if (getSum() == sum) {
// Log
return;
}
}
奖金
作为另一个小提示,我一点也不懂废话,但您可能想考虑改用递归
private void reroll(int sum) {
rollDice();
int sum2 = getSum2();
if (sum2 == 7) {
// Do something
else if (sum2 = sum) {
// Do something
} else {
reroll(sum);
}
}
那么问题是什么呢?你没有在do/while循环中滚动你的骰子,所以数字永远不会改变。@MercifulGiraffe非常感谢你!!真不敢相信我竟然错过了!