2013-10-08 43 views
0
import java.util.Scanner; 
import javax.swing.JOptionPane; 
public class Coin { 
    public static void main(String[] args) 
    { 
     boolean validFinalInput = false; 
     boolean validBetInput = false; 
     boolean validGuessInput = false; //Determines if the guess is a valid input 
     boolean validBet = false; //Determines if the bet is valid 
     boolean goAgain = true; 
     double num; //Unparsed Side Determiner 
     double balance = 100; 
     String Bet = null; //Bet Input 
     double bet = 0; //Parsed Bet 
     String Guess = null; //H or T 
     String Side = null; //Determines Side 
     String GoAgain = null; //Y/N Retry input 
     Scanner in = new Scanner(System.in); 

     while (goAgain == true){ //While true, the player will keep playing. 
      num = Math.round(Math.random()); //Declares Number 
      if (num == 1){ 
       Side = "H"; 
      } else if (num == 0){ 
       Side = "T"; 
      } 
      while (validGuessInput == false){ //Determines if the input is valid 
       System.out.println("Guess: (H/T)"); 
       Guess = in.next(); 
      if (Guess.equals("H") || Guess.equals("T")){ 
       validGuessInput = true; 
      } else { 
       JOptionPane.showMessageDialog(null, "Invalid Guess!"); 
       validGuessInput = false; 
      } 
     } 
     while (validBet == false){ 
      while (validBetInput == false){ 
       try { 
        System.out.println("Bet? (Your balance is $" + balance); 
        Bet = in.next(); 
        bet = Double.parseDouble(Bet); 
        if (bet > 0){ 
         validBetInput = true; 
        } 
       } catch (NumberFormatException e) { 
        JOptionPane.showMessageDialog(null, "Invalid Bet!"); 
       } 
      } 
      if (bet <= balance && bet >= 0){ 
       validBet = true; 
      } else { 
       JOptionPane.showMessageDialog(null, "Invalid Bet!"); 
       validBet = false; 
      } 
     } 
     if (Guess.equals(Side)){ 
      balance = balance + (bet * 2); 
      System.out.println("Correct! The side was: " + Side); 
      System.out.println("Your balance is now: $" + balance); 
     } else { 
      balance = balance - bet; 
      System.out.println("Incorrect! The side was: " + Side); 
      System.out.println("Your balance is now: $" + balance); 
     } 
     if (balance == 0){ 
      System.out.println("You ran out of money. Ending Game."); 
      break; 
     } 
     System.out.println("Go again? (Y/N)"); 
     GoAgain = in.next(); 
     while (validFinalInput == false); 
      System.out.println("Go again? (Y/N)"); 
      GoAgain = in.next(); 
      validGuessInput = false; 
      validBet = false; 
      validBetInput = false; 
     if (GoAgain.equals("Y")){ 
      goAgain = true; 
      validFinalInput = true; 
     } else if (GoAgain.equals("N")){ 
      goAgain = false; 
      validFinalInput = true; 
      System.out.println("Thanks for playing! You ended with: $" + balance); 
     } else { 
      System.out.println("Invalid Input!"); 
      } 
     } 
    } 
} 

所以我写了这个代码为“头或尾巴”风格的游戏。它最初的工作,但后来我决定添加一些功能,它破坏。基本上,它到了最后,但卡在最后一个输入(Y/N)上。头或尾巴游戏 - 循环问题

有人能告诉我我做错了什么吗?

对缺乏评论感到抱歉。

我也意识到我的变量并不完全遵循约定,所以也很抱歉。

谢谢。

+1

你已经粘贴了太多的代码。将其解析为仅与您的实际问题相关的代码。此外,还有一个原因存在命名约定。名为'goAgain'的布尔值和名为'GoAgain'的String使您的代码非常混乱。 – nhgrif

+3

*我也意识到我的变量并不完全遵循约定,所以也为此感到抱歉。*:那么为什么在提问之前不修复它?现在好于以后。它会使你的代码对所有读者更具可读性。你有没有试过用调试器执行代码?这是你应该学习的东西。 –

+1

未来代码的提示,当代码获得这么长时间时,最好将其拆分为方法。如果你像我一样浅,更容易阅读,更容易调试,看起来更漂亮。 – arynaq

回答

5
  1. 在这里删除分号;

    while (validFinalInput == false);

  2. 正确缩进您的代码。

  3. 检查你的逻辑在这里;您正在为两个条件(true和false)设置validFinalInput = true。

    if(GoAgain.equals(“Y”)){ ......... validFinalInput = true; }

    else if(GoAgain.equals(“N”)){ ....... validFinalInput = true; }

+0

一个好的IDE会抓住这一点。我不明白为什么人们不使用IDE。 – Cruncher

+0

也许OP想通过命令行学习它。 – JNL

+0

IDE不一定编译。 – Cruncher

1

goAgain的值在以while (goAgain == true){开头的循环中永远不会改变,因为它在while (validBet == false){之前以}结尾。该右括号错位。

0

你有这个while语句

while (validFinalInput == false); 

这是一个无限循环!由于分号,它永远不会通过这部分代码。如果你像这样重写它,它应该可以工作:

 while (validFinalInput == false) 
    { 
     System.out.println("Go again? (Y/N)"); 
     GoAgain = in.next(); 
     validGuessInput = false; 
     validBet = false; 
     validBetInput = false; 
     if (GoAgain.equals("Y")) 
     { 
     goAgain = true; 
     validFinalInput = true; 
     } 
     else if (GoAgain.equals("N")) 
     { 
      goAgain = false; 
      validFinalInput = true; 
      System.out.println("Thanks for playing! You ended with: $" + balance); 
     } 
     else 
     { 
      System.out.println("Invalid Input!"); 
     } 
    }