有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在while循环中使用If语句,21点游戏

在学校完成我的黑杰克游戏的最后阶段。 我似乎在尝试编程逻辑时遇到了问题

基本上,只有当他们的牌是<;=16.由于某种原因,if声明不起作用,而且不管他们的卡值多少,庄家一直在打或一直在打。。。我知道这可能很简单,但我似乎找不到

而且,当庄家的卡值超过21时,他也不会崩溃

main(这里有问题)

import java.util.Scanner;
import java.util.ArrayList;

public class game {
public static String name;

public static void main(String[]args){

    deck doc = new deck();
    dealer dealer = new dealer(doc);

    Scanner nameScanner = new Scanner(System.in);

    int money = 200;

    System.out.println("Welcome to BlackJack!" + "\n\n" + "Your balance: $" + money + "\n\n" + "What is your name? ");
    name = nameScanner.nextLine();

    dealer.start();

    dealer.dealDealer();
    dealer.dealPlayer();
    dealer.dealDealer();
    dealer.dealPlayer();


    boolean dealerStay = false;
    boolean playerStay = false;
    boolean allStay = false;
    boolean tie = false;

    while(true){

        System.out.println(dealer.toString());
        Scanner gameScanner = new Scanner(System.in);   

        System.out.println("\nWould you like to Hit(H) or Stay(S)? ");

        String hos = gameScanner.nextLine();

        //Players & Dealer hit logic
        if(hos.equalsIgnoreCase("h")) {
            dealer.dealPlayer();
        }
        //Player bust
        if(dealer.getPlayerHandValue() > 21){
            System.out.println("*****YOU LOSE\n*****You bust with " + dealer.getPlayerHandValue() + "\n*****Dealer wins by default");
            break;
        }
        //Stay logic
        if(hos.equalsIgnoreCase("s")){
            playerStay = true;
        }
        //Dealer hit logic PROBLEM HERE
        if(playerStay == true && dealer.getDealerHandValue() <= 16){
            dealer.dealDealer();
            System.out.println("\n*****Dealer hit\n");
        }
        //Dealer stay logic PROBLEM HERE
        if (playerStay == true && dealer.getDealerHandValue() > 16){
            System.out.println("\n*****Dealer stayed\n");
            dealerStay = true;
        }
        //Dealer bust PROBLEM HERE
        if(dealer.getDealerHandValue() > 21){
            System.out.println("*****YOU WIN\n *****Dealer busts");
            break;
        }





        }
    }
}

构造函数(如果需要)

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class dealer {

deck deck = new deck();
String dealerTopCardString = "";
card playerHandCard;
card dealerHandCard;
ArrayList<card> dealerHand = new ArrayList<card>();
ArrayList<card> playerHand = new ArrayList<card>();

public dealer(deck cards) {
    deck = cards;

}

public void start() {
    dealerHand = new ArrayList<card>();
    playerHand = new ArrayList<card>();
}

public String getPlayerHand() {

    String playerHandString = "";
    for (int i = 0; i < playerHand.size(); i++) {
        playerHandCard = playerHand.get(i);
        card card = new card(playerHandCard.getValue(),
                playerHandCard.getSuit());
        playerHandString += "\n";
        playerHandString += card.getValue();
        playerHandString += "\t";
        playerHandString += card.getSuit();
    }
    return playerHandString;

}

public String getDealerHand() {

    String dealerHandString = "";
    for (int i = 0; i < dealerHand.size(); i++) {
        dealerHandCard = dealerHand.get(i);
        card card = new card(dealerHandCard.getValue(),
                dealerHandCard.getSuit());
        dealerHandString += "\n";
        dealerHandString += card.getValue();
        dealerHandString += "\t";
        dealerHandString += card.getSuit();
    }
    return dealerHandString;
}

public void dealPlayer() {

    playerHand.add(deck.deal());

}

public void dealDealer() {

    dealerHand.add(deck.deal());

}

public String getDealerTopCard() {
    String dealerTopCard = "";
    card cardTop = dealerHand.get(0);
    card card = new card(cardTop.getValue(), cardTop.getSuit());
    dealerTopCard += "\n";
    dealerTopCard += card.getValue();
    dealerTopCard += "\t";
    dealerTopCard += card.getSuit();
    return dealerTopCard;

}

@Override
public String toString() {

    return  "\n" + game.name + "'s cards : " + getPlayerHand() + "\n\n " + game.name + "'s total: "
            + getPlayerHandValue() + "\n\n" + "Dealer is showing : "
            + getDealerHand();
}

public int getPlayerHandValue() {
    int playerHandValue = 0;        

    for (card a : playerHand) {
        String c = a.getValue();
        if (c.equals("J")) {
            playerHandValue += 10;
        }

        else if (c.equals("Q")) {
            playerHandValue += 10;
        }

        else if (c.equals("K")) {
            playerHandValue += 10;
        }

        else if (c.equals("A")) {
            playerHandValue += 11;
        }

        else {
            playerHandValue += Integer.parseInt(a.getValue());

        }
    }

    int valueOfCards = playerHandValue;
    return valueOfCards;
}

public int getDealerHandValue() {
    int playerHandValue = 0;        

    for (card a : playerHand) {
        String c = a.getValue();
        if (c.equals("J")) {
            playerHandValue += 10;
        }

        else if (c.equals("Q")) {
            playerHandValue += 10;
        }

        else if (c.equals("K")) {
            playerHandValue += 10;
        }

        else if (c.equals("A")) {
            playerHandValue += 11;
        }

        else {
            playerHandValue += Integer.parseInt(a.getValue());

        }
    }

    int valueOfCards = playerHandValue;
    return valueOfCards;
}

public void resetDealerHand() {
    dealerHand.clear();
}

public void resetPlayerHand() {
    playerHand.clear();
}

}

如果我能为您提供任何其他服务,请告诉我,提前感谢您的帮助


共 (1) 个答案

  1. # 1 楼答案

    您的方法getDealerHandValue()正在使用ArrayList playerHand

    它应该使用dealerHandArrayList

    更好的方法是定义一个将列表作为参数的方法,然后用适当的列表调用它,比如

    public int getHandValue(List<card> theHand) {
        int handValue = 0;        
    
        for (card a : theHand) {
            // Your logic
        }
        return handValue;
    }
    

    然后调用getHandValue(playerHand)getHandValue(dealerHand)