添加for循环现在不离开方法

时间:2015-05-04 05:06:14

标签: java

import java.util.Scanner;

public class BlackJack {

static Scanner stdin = new Scanner(System.in);
static String[] deck = new String[52];
static boolean[] userAceCheck = new boolean[11];
static boolean[] dealerAceCheck = new boolean[11];
static String dealerCard = "", dealerHiddenCard = "", userCard = "";

static int dealerCounter = 0, userCounter = 0;

public static void main (String[] args) {




    System.out.println("\n***Welcome to the grand Command Line Casino!***" +
         "\n***Today we are only playing single deck Black Jack!***" +
         "\n***But that's what we do everyday! HAHA!***\n");

    //Creates Deck of cards
    String[] suit = { "Clubs", "Diamonds", "Hearts", "Spades" };
    String[] rank = { "2", "3", "4", "5", "6", "7", "8", "9", "10",
            "Jack", "Queen", "King", "Ace" };

    for (int a=0; a < rank.length; a++) {
        for (int b=0; b < suit.length; b++){
            deck[suit.length*a + b] = (rank[a] +" of "+ suit[b]);
        }
    }

    //Assigns two cards to the dealer 
    //Finds the Integer value of each card and adds it to the dealerCounter

    //first dealer card
    System.out.println("----Dealer's Cards:----");
    System.out.println("(Dealer's First Card Placed Face Down)");
    dealerHiddenCard = randomCard(dealerHiddenCard);
    dealerCard = assignValue(dealerHiddenCard);
        if (dealerCard == "11")             {
            dealerAceCheck[0] = true;        }
    dealerCounter = Integer.parseInt(dealerCard);

    //second dealer card
    dealerCard = randomCard(dealerCard);
    System.out.println(dealerCard);
    dealerCard = assignValue(dealerCard);
        if (dealerCard == "11")             {
            dealerAceCheck[1] = true;        }
    dealerCounter += Integer.parseInt(dealerCard);


    //Assigns two cards to the user 
    //Finds the Integer value of each card and adds it to the userCounter

    //first user card
    System.out.println("\n----Your Cards:----");
    userCard = randomCard(userCard);
    System.out.println(userCard);
    userCard = assignValue(userCard);
        if (userCard == "11")               {
            userAceCheck[0] = true;          }
    userCounter = Integer.parseInt(userCard);

    //second user card
    userCard = randomCard(userCard);
    System.out.println(userCard);
    userCard = assignValue(userCard);
        if (userCard == "11")               {
            userAceCheck[1] = true;          } 
    userCounter += Integer.parseInt(userCard);
    userCounter = userAceHandler(userCounter);  
        if (userCounter == 21)                {
            System.out.println("Black Jack! You Win!"); 
            System.exit(1);                }


    hitStay();

    dealersTurn();  
}




public static void hitStay() {
//Processes a user 'Hit or Stay' selection

    int userInput;

for(int i=2; i<11; i++) {

    System.out.println("\nHit or Stay?");
    System.out.println("(1) Hit\n(2) Stay");
    userInput = stdin.nextInt();

    if (userInput == 1){    
    //Draws another card and adds it to the userCounter
    //Decides where to go depending on new userCounter value

        userCard = randomCard(userCard);
        System.out.println("\n"+userCard);
        userCard = assignValue(userCard);
            if (userCard == "11")               {
                userAceCheck[i] = true;          }                                          
        userCounter += Integer.parseInt(userCard);
        userCounter = userAceHandler(userCounter);
        System.out.print("(Current Count = "+userCounter+")");

        if (userCounter == 21)                              {
            System.out.println("\n21!");
            userInput = 2;                   }
        if (userCounter < 21)                       {
            continue;                    }

        if (userCounter > 21)                       {
            System.out.println("Bust! Maybe next time");
            System.exit(1);                  }
    }   
    if (userInput == 2){                       
        System.out.println("\nAlright, dealer's turn");
        System.out.println("\n(Dealer Flips His Hidden Card Over)");
        System.out.println(dealerHiddenCard);
        System.out.println("Dealer Count = "+dealerCounter+")");
        break;  
    }
}
}



public static void dealersTurn() {
//processes the dealers turn after the user has decided to 'stay'

for (int i=2; i<11; i++) {  
    dealerCounter = dealerAceHandler(dealerCounter);

    if (dealerCounter > userCounter)                {
        System.out.println("\nDealer Wins! Maybe next time.");   }
        System.exit(1);

    if (dealerCounter == userCounter && dealerCounter > 17)     {
        System.out.println("\nPush! (tie game)");
        System.exit(1);                      }

    if (dealerCounter > userCounter && dealerCounter < 21 
                    && dealerCounter >= 17)     {
        System.out.println("\nDealer Wins! Maybe next time.");
        System.exit(1);                      }

    if (dealerCounter < userCounter && dealerCounter >= 17)     {
        System.out.println("\nYou Win!");
        System.exit(1);                      }

    if (dealerCounter > 21)                     {
        System.out.println("\nDealer Bust! You Win!");
        System.exit(1);                      }

    if (dealerCounter == 21)                    {
        System.out.println("\nDealer Wins! Maybe next time.");
        System.exit(1);                      }

    if (dealerCounter < userCounter || dealerCounter < 17)      {
        dealerCard = randomCard(dealerCard);
        System.out.println("\n"+dealerCard);
        dealerCard = assignValue(dealerCard);
            if (dealerCard == "11")             {
                dealerAceCheck[i] = true;        }
        dealerCounter += Integer.parseInt(dealerCard);
        System.out.println("(Dealer Count = "+dealerCounter+")");

        continue;                        }
}
}




public static String randomCard(String draw) {
//Pulls a random card from the deck

    while (true) {
        //Generates a random number between 0 and 52
        int card = (int)(Math.random()*52);
        draw = deck[card];

        //Makes sure the same card isn't drawn twice
        if (draw == "0") {
            continue;}
        else {
            deck[card] = "0";
            return draw;}
    }

}




public static String assignValue(String cardName) {
//Assigns a number value to the card

    if (cardName.contains("2"))    {
        cardName = "2";         }
    if (cardName.contains("3"))    {
        cardName = "3";         }
    if (cardName.contains("4"))    {
        cardName = "4";         }
    if (cardName.contains("5"))    {
        cardName = "5";         }
    if (cardName.contains("6"))    {
        cardName = "6";         }
    if (cardName.contains("7"))    {
        cardName = "7";         }
    if (cardName.contains("8"))    {
        cardName = "8";         }
    if (cardName.contains("9"))    {
        cardName = "9";         }
    if (cardName.contains("10"))   {
        cardName = "10";        }
    if (cardName.contains("Jack")) {
        cardName = "10";        }
    if (cardName.contains("Queen")){
        cardName = "10";        }
    if (cardName.contains("King")) {
        cardName = "10";        }
    if (cardName.contains("Ace"))  {
        cardName = "11";        }

    return cardName;
}




public static int userAceHandler(int userCounter) {
//handles the situation if an Ace is drawn for the user

for (int i=0; i<11; i++){

    if (userCounter >= 22 && userAceCheck[i] == true)       {
        userAceCheck[i] = false;
        userCounter = userCounter - 10;
        break;                           } 
    else                                {
        if (i==10) { break; }
        else { continue; }                   }
}                                        
    return userCounter;

}



public static int dealerAceHandler(int dealerCounter) {
//handles the situation if an Ace is drawn for the dealer

for (int i=0; i<11; i++){

    if (dealerCounter >= 22 && dealerAceCheck[i] == true)       {
        dealerAceCheck[i] = false;
        dealerCounter = dealerCounter - 10;
        break;                           }
    else                                {
        if (i==10) { break; }
        else { continue; }                   }
}
    return dealerCounter;


}
}

所以我的main方法首先顺利运行,然后调用我的hitStay()方法。在此hitStay()完成后,它无法回到main方法然后调用dealersTurn()方法。

我最近添加了一个for循环,但我似乎无法弄清楚为什么它现在不起作用。我觉得这是问题,因为它在for循环之前工作。我对编码真的很陌生,任何帮助都会受到赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

从您的代码中使用System.exit(1)即可终止您的程序 来自exit(int status)

  

终止当前运行的Java虚拟机。该参数用作状态代码;按照惯例,非零状态代码表示异常终止   此方法在类Runtime中调用exit方法。此方法永远不会正常返回。

如果您希望将回复控制权交给来电者,请从程序中删除System.exit使用return语句。
JLS 14.17. The return Statement

例如:

if (dealerCounter > 21){
      System.out.println("\nDealer Bust! You Win!");
      return; 
}