2016-02-18 231 views
-2

首先,我很抱歉,因爲這個代碼看起來效率低下給我,但我的教授希望它這樣(的評論是她的)。我在這裏遇到很多問題,但似乎有一個核心問題,那就是當我運行程序時,它不會進入for循環。因此,我假設它沒有進入for循環所在的while循環,我不知道爲什麼。這裏是「修改」二十一點計劃,任何幫助表示讚賞:Java的酒杯不進入,而所有的循環

import java.util.Scanner; 
import java.util.Random; 

public class BlackJack { 
enum Decisions 

{ 
    HIT, STAND, SURRENDER, QUIT, PLAY, NOTVALID; 
    // NOTVALID is used to re-ask to play again 
} 

enum Card { 
    ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, QUEEN, JACK, KING; 
} 

// Tells you if the Decision enum is valid or not 
public static boolean containsDecision(String decision) { 
    for (Decisions d : Decisions.values()) { 
     if (d.name().equals(decision)) { 
      return true; 
     } 
    } 
    return false; 
} 

// Tells you what is the integer value of said Card enum 
public static int getCardValue(int pick) { 
    if (pick == 0) { 
     return 1; 
    } else if (pick >= 10 && pick <= 12) { 
     return 10; 
    } 
    return pick + 1; 
} 

// 1 pts 
public static int housePlay(int houseCardSum) { 
    int cardPick; 

    cardPick = -1; 

    while (houseCardSum <= 17) 
    { 
     getCardValue(cardPick); 
     houseCardSum = (cardPick + houseCardSum); 

     System.out.println("Hit from house! CARD: " + cardPick + " VALUE: " + houseCardSum); 
    } 
    return houseCardSum; 
} 

// 1.5 pts 
public static void findWinner(int playerCardSum, int houseCardSum, Decisions decision) { 

     houseCardSum = housePlay(houseCardSum); 

     if ((playerCardSum > 21) || (houseCardSum > 21)) 
    { 
     if (houseCardSum > 21) 
     { 
      System.out.println("Sorry you lose!"); 
     } 
     else 
     { 
      System.out.println("You win!"); 
     } 
    } 
    else if (decision == Decisions.SURRENDER) 
    { 
     System.out.println("You lose because you surrendered!"); 
    } 
    else if (playerCardSum == houseCardSum) 
    { 
     System.out.println("Its a push (tie)!"); 
    } 
    else if ((playerCardSum > houseCardSum) && (playerCardSum < 21)) 
    { 
     System.out.println("You win!"); 
    } 
    else if ((playerCardSum == 21) && (houseCardSum != 21)) 
    { 
     System.out.println("Blackjack win!"); 
    } 
    else 
    { 
     System.out.println("Sorry you lose!"); 
    } 
    // if, else if, else, check playerCardSum, houseCardSum as well as if 
    // Decision equaled to SURRENDER 
    // print the House and You Hand at the end 
    // call housePlay function and assign the output to houseCard function 
    // iff not playerCardSum is not 21 and Decisions is not Surrender 
    // these below will be used moved them around freely in this function 
    // where you need too. 
    // put in correct branch sub 
              // statement 
    System.out.println("House Hand: " + houseCardSum + " Your Hand: " + playerCardSum); // this 
                         // is 
                         // printed 
                         // out 
                         // after 
                         // all 
                         // branch 
                         // statements 
                         // assessed 
} 

// 7.5pts 
public static void main(String[] args) { 
    System.out.println("========== BlackJack =========="); 
    System.out.print("What is your name: "); 

    Scanner keyboard = new Scanner(System.in); 

    String playerName; 

    playerName = keyboard.nextLine(); 

    System.out.println("Okay, " + playerName + ", let's play!"); 

    Decisions decision = Decisions.PLAY ; 

    int cardPick; 

    cardPick = -1; 

    while (decision != Decisions.QUIT); 
    { 
     int playerSum; 
     int houseSum; 

     playerSum = 0; 
     houseSum = 0; 

     Card holeCard = null; 


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

       Random newCard = new Random(); 

       cardPick = newCard.nextInt(14); 


       playerSum = playerSum + getCardValue(cardPick); 

       System.out.println("Card: " + (Card.values()[cardPick])); 

       System.out.println("Sum of your hand: " + playerSum);    
      } 
     } 
+0

@flkes縮進沒問題,你在說什麼? – f1sh

+2

分號花花公子。 '而(判決= Decisions.Quit!);'卸下';' – Redtama

+0

環路(同時或以其他方式)的後跟一個碼塊(由包圍{})或一個語句。分號被認爲是一個有效的「無操作」語句,因此您不斷循環相同的條件,而無需在每個循環上運行任何代碼。 – Neil

回答

3

刪除while語句後面的分號。

while (decision != Decisions.QUIT); 

while (decision != Decisions.QUIT) 
+1

這更像是一個「接近印刷錯誤」的問題 – Idos