分配是允许用户输入一笔钱作为下注(该数字必须大于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();
}
}
}
答案 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'。现金通过课堂上的方法更新。