初学者二十一点游戏使用循环

时间:2014-01-28 00:37:19

标签: java loops blackjack

我正在尝试为学校制作一个二十一点的程序,我不明白为什么我的程序在我拿到前两张卡片之后要求另一张卡片后重新开始。任何帮助都会很棒。我的所有代码都在下面。

import java.util.Scanner;
import java.util.*;

public class BlackjackGame {

    public static void main(String[] args) {

        String anotherCard, playAgain = "y", ctn;
        int nextCard, card1, card2, dCard1, dCard2;
        int cardTotal = 0, dTotal = 0;

        Scanner keyboard = new Scanner(System.in);

        Random random = new Random();

        // Begin dealing the players first two cards

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

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

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

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

            System.out.print("Another Card (y/n)?: ");
            anotherCard = keyboard.nextLine();

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

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

                System.out.print("Another Card (y/n)?: ");
                anotherCard = keyboard.nextLine();
                if (anotherCard == "n")
                System.out.print("Press c to continue dealers cards");
                ctn = keyboard.nextLine();


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

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

                }

            }

        }
    }
}

1 个答案:

答案 0 :(得分:3)

这个表达式:

if (playAgain == "y")

永远不会成立,因为==运算符仅在两个操作数都是相同的对象时才为真。要比较字符串的,请使用equals()

if (playAgain.equals("y"))

不要心疼。问题在于语言 - 使用==运算符是一个愚蠢的选择。这里有很大一部分问题是这个问题的根源。

相关问题