循环和/或如果其他双返回
问题描述:
我试图编写一个程序,玩用户赌博高低或七人骰子游戏。到目前为止,我已经成功地获得了掷骰子并添加了正确的部分,但我的投注功能并不顺利。以下是我迄今为止:循环和/或如果其他双返回
import java.util.Random;
import java.util.Scanner;
public class Project07
{
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
Random r = new Random();
int money = 100;
int newtotal = 100;
System.out.println("You have " + money + " dollars");
while (money > 0)
{
System.out.println("Enter an amount to be or 0 to quit");
int bet = keyboard.nextInt();
if (bet == 0)
{
System.out.println("You end with " + money + " dollars");
System.exit(0);
}
System.out.println("Bet 1 for high, 2 for low, or 3 for 7's");
int choose = keyboard.nextInt();
int diceb = r.nextInt(7 - 1) + 1;
int dicea = r.nextInt(7 - 1) + 1;
int dicetotal = dicea + diceb;
System.out.println(dicetotal);
System.out.println("You bet $" + bet);
if ((choose == 1) && (dicetotal > 7))
{
newtotal = newtotal + bet;
System.out.println("You win $" + bet);
System.out.print("You have " + newtotal + " dollars left");
}
else if ((choose == 1) && (dicetotal <= 7))
{
newtotal = newtotal - bet;
System.out.println("You have " + newtotal + "dollars left");
}
else if ((choose == 2) && (dicetotal < 7))
{
newtotal = newtotal + bet;
System.out.println("You have " + newtotal + "dollars left");
}
else if ((choose == 2) && (dicetotal >= 7))
{
newtotal = newtotal - bet;
System.out.println("You have " + newtotal + "dollars left");
}
else if ((choose == 3) && (dicetotal == 7))
{
newtotal = newtotal + bet;
System.out.println("You have " + newtotal + "dollars left");
}
else if ((choose == 3) && (dicetotal != 7))
;
{
newtotal = newtotal - bet;
System.out.println("You have " + newtotal + "dollars left");
}
}
}
}
输出我得到的应该是诸如:你有100美元 输入量是或0退出投注1高2低或3 7的你下注$ 20 你赢$ 20 你有120美元左 输入量是或0退出你有120美元
结束然而,它似乎s激活if else块的输赢部分并给我这个:你有100美元 输入金额为0或退出下注1为高,2为低或3为7's 你下注$ 20 你赢$ 20 你有120美元leftYou有100dollars留下 输入量是或0退出你用100美元
不太肯定我的问题是结束了,也许我需要专门为它的赌注功能写一个新的方法?任何帮助,将不胜感激。
答
正确格式化(2种主要样式之一):
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
Random r = new Random();
int money = 100;
int newtotal = 100;
System.out.println("You have " + money + " dollars");
while (money > 0) {
System.out.println("Enter an amount to be or 0 to quit");
int bet = keyboard.nextInt();
if (bet == 0) {
System.out.println("You end with " + money +" dollars");
System.exit(0);
}
System.out.println("Bet 1 for high, 2 for low, or 3 for 7's");
int choose = keyboard.nextInt();
int diceb = r.nextInt(7 - 1) + 1;
int dicea = r.nextInt(7 - 1) + 1;
int dicetotal = dicea + diceb;
System.out.println(dicetotal);
System.out.println("You bet $" + bet);
if ((choose == 1) && (dicetotal >7)) {
newtotal= newtotal + bet;
System.out.println("You win $" + bet);
System.out.print("You have " + newtotal +" dollars left");
}
else if ((choose == 1) && (dicetotal <= 7)) {
newtotal = newtotal - bet;
System.out.println("You have " + newtotal + "dollars left");
}
else if ((choose == 2) && (dicetotal < 7)) {
newtotal = newtotal + bet;
System.out.println("You have " + newtotal + "dollars left");
}
else if ((choose == 2) && (dicetotal >= 7)) {
newtotal = newtotal - bet;
System.out.println("You have " + newtotal + "dollars left");
}
else if ((choose == 3) && (dicetotal == 7)) {
newtotal = newtotal + bet;
System.out.println("You have " + newtotal + "dollars left");
}
else if ((choose == 3) && (dicetotal != 7)); { <<== Wayward semicolon!!
newtotal = newtotal - bet;
System.out.println("You have " + newtotal + "dollars left");
}
}
}
任性分号将是显而易见的,因为你从来没有在任何场合比在一行的末尾其他分号。很容易查看代码并查看if
条件 - 您不必将它们从混乱中挖掘出来。 while
结尾显而易见从缩进。
(其他主要风格是将{
人物放在自己的台词:
...
}
else if ((choose == 1) && (dicetotal <= 7))
{
newtotal = newtotal - bet;
System.out.println("You have " + newtotal + "dollars left");
}
else if ((choose == 2) && (dicetotal < 7))
{
newtotal = newtotal + bet;
System.out.println("You have " + newtotal + "dollars left");
}
...
我不像喜欢这种风格的两个,因为它传播出来的文字太多(和屏幕空间想读&理解大型程序),而且,与任性;
情况下,它并不像明显,;
是格格不入的时候是有价值的。)
(另外还有一点地方闭幕}
的风格与以下01相同的行:
...
} else if ((choose == 1) && (dicetotal <= 7)) {
newtotal = newtotal - bet;
System.out.println("You have " + newtotal + "dollars left");
} else if ((choose == 2) && (dicetotal < 7)) {
...
这是更紧凑,但我的眼睛TOO紧凑,并开始被混乱。另外,它不可能在else
之前放置注释行。但其他人有不同的偏好。主要挑选一种风格并坚持下去,并在一个团队中尝试同意一个共同的方案(而不是压制它)。)
请格式化你的if语句正常。 –
在最后一个'if else'条件下有一个';',这意味着最后一个预期的'if else'条件将始终运行。最后关闭扫描仪对象以防止内存泄漏。 –
遵循某种格式约定可以帮助您捕捉那样的简单错误。 –