循环和/或如果其他双返回

问题描述:

我试图编写一个程序,玩用户赌博高低或七人骰子游戏。到目前为止,我已经成功地获得了掷骰子并添加了正确的部分,但我的投注功能并不顺利。以下是我迄今为止:循环和/或如果其他双返回

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

请格式化你的if语句正常。 –

+3

在最后一个'if else'条件下有一个';',这意味着最后一个预期的'if else'条件将始终运行。最后关闭扫描仪对象以防止内存泄漏。 –

+0

遵循某种格式约定可以帮助您捕捉那样的简单错误。 –

正确格式化(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之前放置注释行。但其他人有不同的偏好。主要挑选一种风格并坚持下去,并在一个团队中尝试同意一个共同的方案(而不是压制它)。)