Java 21 点投注和交易不符合我的预期

Java blackjack betting and dealing dont work the way i intended them to

所以我一直在研究 21 点程序,但出于某种原因我无法使 "another card y/n" 正常工作,而且投注系统似乎也不起作用。另外,我不太确定布尔方法是怎么回事——我不知道在 main 中调用它的位置。任何提示将不胜感激!

我已经尝试换掉 whiles/ifs,但一切都变得混乱了。我也试过使该方法无效,但我需要它 return userWins TRUE 或 FALSE.. 因为它是一个游戏.. 你知道吗?

import java.io.*;
import java.util.Scanner;
import java.util.Random;

public class ProgramBlackJack {

    public static void main(String[] args) throws IOException {
        Scanner in ; in = new Scanner(System.in);


        int money; // Amount of money the user has.
        int bet; // Amount user bets on a game.
        boolean userWins = true; // Did the user win the game?

        System.out.println("Welcome to Lunas BlackJack table. How's it goin?");
        System.out.println();

        money = 100; // User starts with 0.

        while (true) {
            System.out.println("You have " + money + " dollars.");
            do {
                System.out.println("How much do you wanna bet? Or if you're done, enter 0 to walk away from the tables.)");
                System.out.print("$");

                bet = in .nextInt();
                if (bet < 0 || bet > money) {
                    System.out.println("Your bet must be between 0 and " + money + '.');
                }
            }
            while (bet < 0 || bet > money); {
                if (bet == 0) {
                    System.out.println("The dealer waves goodbye.");
                    break; //walk away
                }

                userWins = playBlackjack(userWins);
                if (userWins == true) {
                    money = money + bet;
                }
                if (userWins == false) {
                    money = money - bet;
                    System.out.println();
                }
                if (money == 0) {
                    System.out.println("Aw shoot, looks like you've are out of money!");
                    break;
                }
            }
        }

        System.out.println();
        System.out.println("You walk away with $" + money + '.');

    } //end method


    public static boolean playBlackjack(boolean userWins) {
        String anotherCard;
        String playAgain = "y";
        String ctn;

        int nextCard;
        int card1;
        int card2;
        int dCard1;
        int dCard2;
        int cardTotal = 0;
        int dTotal = 0;

        Scanner in = new Scanner(System.in);
        Random random = new Random();

        // Begin dealing the players first two cards

        if (playAgain.equals("y")) {
            //dealers first two random cards
            dCard1 = random.nextInt(11) + 1;
            dCard2 = random.nextInt(11) + 1;

            //players first two random cards and card total
            card1 = random.nextInt(11) + 1;
            card2 = random.nextInt(11) + 1;
            cardTotal = card1 + card2;

            //Dealers two card total and display only one dealer card
            dTotal = dCard1 + dCard2;
            System.out.println("The dealer shows: " + dCard1);

            //Display players first two cards & card total
            System.out.println("First cards: " + card1 + ", " + card2);
            System.out.println("Total: " + cardTotal);

            //Asks if want to deal another card
            System.out.print("Another card (y/n)?: ");
            anotherCard = in .nextLine();

            //If yes
            while (anotherCard == "y") { //while1
                nextCard = random.nextInt(10) + 1;
                cardTotal += nextCard;
                System.out.println("Card: " + nextCard);
                System.out.println("Total: " + cardTotal);

                if (cardTotal > 21) { //if1
                    System.out.println("You busted, the dealer Wins");
                    System.out.println("Do you want to play again? (y/n): ");
                    playAgain = in .nextLine();
                } //if1

                if (cardTotal < 21) { //if2
                    System.out.print("Another Card (y/n)?: ");
                    anotherCard = in .nextLine();
                } //if2

                if (anotherCard == "n") { //if3

                    System.out.print("Press c to continue dealers cards");
                    ctn = in .nextLine();

                    while (ctn == "c" && dTotal < 17) { //while2
                        nextCard = random.nextInt(10) + 1;
                        dTotal += nextCard;
                    } //while2

                    if (dTotal > 21) { //if4
                        System.out.println("Dealer Busts, You Win!");
                        System.out.println("Play Again? (y/n): ");
                        playAgain = in .nextLine();
                    } //if4

                    if (playAgain.equalsIgnoreCase("y")) //ignorecase = ignore capitals/lowercase
                    { //if5
                        playAgain = "y";
                    } //if5

                    if (playAgain.equalsIgnoreCase("n")) //no!
                    { //else1
                        System.exit(0);
                    } //else1
                } //if3

            } //while1
        } //END BIG WHILE
        return userWins = true;
    } //end playBlackJack()
} //end main

用户似乎也不会输给经销商,我预计会发生一些损失。我还希望 "another card?" 中的 (y/n) 可以工作,但 "n" 什么都不做。

我认为您唯一的问题是您尝试 return userWin 布尔值的方式:

 public static boolean playBlackjack(boolean userWins)

将其更改为(并在调用时删除输入参数)

 public static boolean playBlackjack()

和return用户丢失时为false,否则为true;

例如:

{//if1
  System.out.println("You busted, the dealer Wins");
  System.out.println("Do you want to play again? (y/n): ");
  playAgain = in.nextLine();
  return false;
}//if1

完整代码:

public class ProgramBlackJack
{

  public static void main(String[] args)throws IOException
  {
    Scanner in;
    in = new Scanner(System.in);

    int money;
    int bet;            // Amount user bets on a game.
    boolean userWins = true;   // Did the user win the game?

    System.out.println("Welcome to Lunas BlackJack table. How's it goin?");
    System.out.println();

    money = 100;  // User starts with 0.

    while (true)
    {
      System.out.println("You have " + money + " dollars.");
      do
      {
        System.out.println("How much do you wanna bet? Or if you're done, enter 0 to walk away from the tables.)");
        System.out.print("$");

        bet = in.nextInt();
        if (bet < 0 || bet > money)
        {
          System.out.println("Your bet must be between 0 and " + money + '.');
        }
      }
      while (bet < 0 || bet > money);
      {
        if (bet == 0)
        {
          System.out.println("The dealer waves goodbye.");
          break; //walk away
        }

        userWins = playBlackjack();
        if (userWins == true)
        {
          money = money + bet;
        }
        if (userWins == false)
        {
          money = money - bet;
          System.out.println();
        }
        if (money == 0)
        {
          System.out.println("Aw shoot, looks like you've are out of money!");
          break;
        }
      }
    }

    System.out.println();
    System.out.println("You walk away with $" + money + '.');

  } //end method


  public static boolean playBlackjack()
  {
    String anotherCard;
    String playAgain = "y";
    String ctn;

    int nextCard;
    int card1;
    int card2;
    int dCard1;
    int dCard2;
    int cardTotal = 0;
    int dTotal = 0;

    Scanner in = new Scanner(System.in);
    Random random = new Random();

    // Begin dealing the players first two cards

    if (playAgain.equals("y"))
    {
      //dealers first two random cards
      dCard1 = random.nextInt(11) + 1;
      dCard2 = random.nextInt(11) +1;

      //players first two random cards and card total
      card1 = random.nextInt(11) + 1;
      card2 = random.nextInt(11) + 1;
      cardTotal = card1 + card2;

      //Dealers two card total and display only one dealer card
      dTotal = dCard1 + dCard2;
      System.out.println("The dealer shows: " + dCard1);

      //Display players first two cards & card total
      System.out.println("First cards: " + card1 + ", " +card2);
      System.out.println("Total: "+ cardTotal);

      //Asks if want to deal another card
      System.out.print("Another card (y/n)?: ");
      anotherCard = in.nextLine();

      //If yes
      while (anotherCard.equals("y"))
      {//while1
        nextCard = random.nextInt(10) + 1;
        cardTotal += nextCard;
        System.out.println("Card: " + nextCard);
        System.out.println("Total: " + cardTotal);

        if (cardTotal > 21)
        {//if1
          System.out.println("You busted, the dealer Wins");
          System.out.println("Do you want to play again? (y/n): ");
          playAgain = in.nextLine();
          return false;
        }//if1

        if (cardTotal < 21)
        {//if2
          System.out.print("Another Card (y/n)?: ");
          anotherCard = in.nextLine();
        }//if2

        if (anotherCard == "n")
        {//if3

          System.out.print("Press c to continue dealers cards");
          ctn = in.nextLine();

          while (ctn == "c" && dTotal < 17)
          {//while2
            nextCard = random.nextInt(10) + 1;
            dTotal += nextCard;
          }//while2

          if (dTotal > 21)
          {//if4
            System.out.println("Dealer Busts, You Win!");
            System.out.println("Play Again? (y/n): ");
            playAgain = in.nextLine();
            return false;
          }//if4

          if (playAgain.equalsIgnoreCase("y")) //ignorecase = ignore capitals/lowercase
          {//if5
            playAgain = "y";
          }//if5

          if (playAgain.equalsIgnoreCase("n")) //no!
          {//else1
            System.exit(0);
          }//else1
        }//if3

      }//while1
    }//END BIG WHILE
    return true;
  }//end playBlackJack()
} //end main