Java Dice游戏问题

时间:2014-10-11 20:46:01

标签: java while-loop dice

分配是允许用户输入一笔钱作为下注(该数字必须大于0下注> = 1)。

1)滚动两个骰子(1-6)。

2)计算他们的总和。如果此总和等于7,则用户赢得4 $并且如果他们输了,则用户输掉1 $(例如:用户输入5 $作为初始下注,wins = 5 + 4 = 9 $ now-loses = 5-1 = 4 $现在)。

在用户播放之后,我们需要询问他们是否想再次播放,并且基本上使用while语句再次运行该程序。

我在第43行和第50行中注释了要打印的语句,因为会发生这两行会在用户想要输入多少的初始问题之前打印(这就是我将它们评论出来的原因)。 / p>

现在问题是,在用户输入他/她想要下注的金额之后,系统然后计算他们赢/输的金额并打印出来。但是,它跳过了打印声明,询问他们是否想再玩一次。为什么是这样?我知道有些事情是错误的,因为最初程序正在跳过第一个print语句,直接进入第二和第三个函数。有什么帮助吗?

谢谢!

//编辑:如果它还不是很明显,我对程序很新,所以请随时以任何方式批评我^^

  //Dice Game
//10/11/14
import java.util.Random;
import java.util.Scanner;

public class diceGame2
{
    //Instance Variables
    private String play = "yes";
    private int cash;
    private int sum;
    private int winnings;
    Scanner scan = new Scanner(System.in);
    Random rand = new Random();


    //Constructor
    public diceGame2()
    {
        cash=0;
        sum=0;
        winnings=0;
    }
    public void game()
    {
    do
    {
        System.out.println("Please enter the amount of money you would like to bet");
        cash=scan.nextInt();
        if(cash<1)
        {
            System.out.println("Please enter a bet greater than 1$.");
            cash=scan.nextInt();
        }
    }while((play.equals("yes")&&cash<0));
    }
    public int getDice()
    {

        int dice = rand.nextInt(6) + 1;
        System.out.println("The number rolled was a" + " " + dice);
        System.out.println();
        return dice;
    }
    public int getSum(int d1, int d2)
    {
        sum = d1+d2;
        System.out.println("Their sum is" + " " + sum + " " + "so...");
        System.out.println();
        return sum;
    }
    public int getWinnings(int sum)
    {
    if(sum==7)
    {
        cash += (4);
        System.out.println("You have won" + " " + "4$.");
    }
    else
    {
        cash -= (1);
        System.out.println("You have lost" + " " + "1$.");
    }
    System.out.println("You current have" + " " + cash  + " " + "dollars left to bet");
    return winnings;    
    }
    public String getPlay()
    {
        System.out.println("Do you want to play again");
        play = scan.next();
        return play;
    }

}//Class




//Dice Game Runner
//10/11/14
public class diceGameRunner
{
    public static void main(String[]args)
    {
    String play = "yes";
    while((play.equals("yes")))
    {
    diceGame2 d1 = new diceGame2();
    int dice1, dice2, sum;
    double money;

    d1.game();
    dice1 = d1.getDice();
    dice2 = d1.getDice();
    sum = d1.getSum(dice1, dice2);
    money = d1.getWinnings(sum);
    play = d1.getPlay();
    }


    }

}

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。 第一:你说没有break语句你的while循环永远不会中断。这是因为条件总是如此。你永远不会改变循环中的条件总是强制它为真。

第二:你有“现金= - (-1);”那里有一个额外的标志。

最后(更多旁注):你的对象中有循环。这将使您很难调用任何方法并制作清晰的代码。尝试在对象外部移动while循环,并使对象的方法只执行一个任务。

编辑:以下是您应该做的示例代码。它在大约10分钟内完成,应根据您的需要进行修改。这是一个关于如何设置类并进行循环的示例。

主要方法:

import java.util.Scanner;

/**
 *
 * @author Tyler Weaver
 */
public class Test {
    public static void main(String[] args) {
        String play = "yes";
        int cash;
        Scanner scan = new Scanner(System.in);

        do {
            System.out.printf("Enter cash amount: ");
            cash = scan.nextInt();
        } while (cash < 1);

        DiceGame game = new DiceGame(cash);

        while (play.equalsIgnoreCase("yes") && cash > 0) {
            int dice1 = game.roll();
            int dice2 = game.roll();

            game.calcCash(dice1 + dice2);
            cash = game.getCash();
            System.out.printf("Your new cash amount is $%,.2f%n", (float) cash);
            System.out.printf("Do you want to play again? ");

            play = scan.next();
        }
    }
}

除了其他必要的方法之外,这是一个类应该是什么样子的例子:

import java.util.Random;

/**
 *
 * @author Tyler Weaver
 */
public class DiceGame {
    private int cash;
    private Random gen;

    public DiceGame(final int cash) {
        this.cash = cash;
        gen = new Random();
    }

    public int roll() {
        return gen.nextInt(6) + 1;
    }

    public void calcCash(final int sum) {
        cash += (sum == 7) ? 4 : -1;
    }

    public int getCash() {
        return cash;
    }
}

这不是答案。这是您问题的示例代码。你必须弄清楚如何实现你所需要的。

注意该类如何仅对每个方法执行一个操作。这只是编码惯例。还要注意我在主方法中如何在循环外请求现金并在里面计算。我还问他们是否想在方法结束时再次播放以更新条件'play'。现金通过课堂上的方法更新。