2014-11-14 51 views
0

我一直在這個項目上工作了幾天,我不知道爲什麼它不工作。希望一個新的眼睛會有所幫助。當我運行這個時,有幾件事情不會發生。麻煩在java寫21點和接龍程序

真正有效的唯一一件事是管理用戶下注的部分。一些問題包括:

  • 它沒有帶來一個卡片值(應該來自一個從1-13中隨機產生一個數字的類)。

  • 不等待用戶輸入0,以吸引更多的卡或不

  • 當它說的第三張牌是什麼,它說[email protected]
  • 沒有給出總牌值。
  • 當我嘗試修復問題時,也會發生錯誤。在cardTotal的補充中,錯誤表示「操作符+對於參數類型未定義」。

它可能是缺少或有額外的括號,但我找不到他們應該/不應該在哪裏。這裏是我的代碼:

import java.util.Scanner; 

public class Game { 
    private double pot; 
    private double bet; 
    private int answer; 
    private int cardTotal; 

    Card card1 = new Card(); 
    Card card2 = new Card(); 
    Card card3 = new Card(); 

    // constructor 
    public Game(){ 
     pot = 100; 
     bet = 0; 
    } 

    Scanner keyboard = new Scanner(System.in); 

    // GetBetFrom user, prompts user to enter a valid bet, reenter until a valid amount 
    public double getBetFromUser(){ 
     System.out.println("Your current pot is: "+pot); 

     System.out.println("Enter your bet amount"); 
     bet = keyboard.nextDouble(); 

     //Rules for the bet 
     while(bet>pot || bet<0){ 
     if(pot==0){ 
      break; 
     } 
     if(bet>pot){ 
      System.out.println("Sorry, you don't have enough money for that, try again"); 
      bet = keyboard.nextDouble(); 
     } 
     if(bet<0){ 
      System.out.println("That is not a valid bet, please try again"); 
      bet = keyboard.nextDouble(); 
     } 
    } 
    return bet; 
    } 

    // Game mechanics 
    public void gamePlay(){ 
    System.out.println("Your first card is: "+card1); 
    System.out.println("Your second card is: "+card2); 
    cardTotal= card1 + card2; 
    System.out.println("Your total is: "+cardTotal); 
    System.out.println("Enter 0 to draw more, any other number to quit: "); 

    if(answer == 0); { 
     System.out.println("Your next card is: "+card3); 
     System.out.println("Your total is: "); 
    } 
} 

public void results(){ 
    if(cardTotal > 21){ 
     System.out.println("You lose your bet"); 
     pot = pot-bet; 
    } 
    if(cardTotal==21){ 
     System.out.println("You win three times your bet"); 
     pot = pot-bet+(bet*3); 
    } 
    if(cardTotal==20){ 
     System.out.println("You win double your bet amount"); 
     pot = pot-bet+(bet*2); 
    } 
    if(cardTotal<=19){ 
     System.out.println("You win your bet amount"); 
    } 
} 
} 

這是我的卡類

import java.util.Random; 

public class Card { 
private int cardValue; 
Random random = new Random(); 

public Card(){ 
    cardValue = 1; 
} 

public int getCard(){ 
    cardValue = (cardValue + random.nextInt(12)); 
    if(cardValue>10) 
     return 10; 
    else 
     return cardValue; 
} 

public int display(){ 
    switch (cardValue){ 
    case 1: System.out.println("Ace"); 
    break; 
    case 2: System.out.println("Two"); 
    break; 
    case 3: System.out.println("Three"); 
    break; 
    case 4: System.out.println("Four"); 
    break; 
    case 5: System.out.println("Five"); 
    break; 
    case 6: System.out.println("Six"); 
    break; 
    case 7: System.out.println("Seven"); 
    break; 
    case 8: System.out.println("Eight"); 
    break; 
    case 9: System.out.println("Nine"); 
    break; 
    case 10: System.out.println("Ten"); 
    break; 
    case 11: System.out.println("Jack"); 
    break; 
    case 12: System.out.println("Queen"); 
    break; 
    case 13: System.out.println("King"); 
    break; 

    } 
    return cardValue; 
}  

}

+1

如果你問每題1個問題你會得到更好的反應。你已經列出了這個問題中的5個問題。你應該專注於一個 – 2014-11-14 20:43:10

+0

你也應該嘗試一次實現你的需求。在知道隨機生成額外卡片的代碼正在工作之前,不要開始編寫代碼來繪製卡片。這樣,你就可以解決更簡單的問題,而不是一次性解決所有問題 – 2014-11-14 20:44:57

+0

'它說Card @ 42a57993',比較https://docs.oracle.com/javase/7/docs/api/java/lang /Object.html#toString%28%29 – zapl 2014-11-14 20:45:16

回答

1

我猜的代碼,你的錯誤發生在這裏:

cardTotal= card1 + card2; 

card1 and card2Card類型。編譯器不知道如何添加它們。

你應該把你的卡總這樣的:

cardTotal = card1.cardValue+ card2.cardValue; 
+0

@sockowl它取決於'Card'類的定義方式 – 2014-11-14 20:48:33

+0

我將我的卡類的代碼添加到我的問題中 – sockowl 2014-11-14 20:52:29

+0

您需要將'new Random()'移動到靜態初始化器,所以它只在程序開始時發生一次,並且你需要移動該調用以從getCard()中獲取一個隨機值,並進入Card()初始化器,這樣新的卡將有一個隨機數每次調用'getCard()'都不會改變。並擺脫那個愚蠢的'開關';你還沒有學過陣列嗎? – 2014-11-14 22:30:05

0

這可能會幫助你。我建議你閱讀一下如何引用對象及其方法。通過鍵盤輸入丟失的數據的驗證,但是這是你的工作:

import java.util.Scanner; 
public class Game { 
    private double pot; 
    private double bet; 
    private int answer; 
    private int cardTotal; 

    Card card1 = new Card(); 
    Card card2 = new Card(); 
    Card card3 = new Card(); 

    // constructor 
    public Game(){ 
     pot = 100; 
     bet = 0; 
    } 

    Scanner keyboard = new Scanner(System.in); 

    // GetBetFrom user, prompts user to enter a valid bet, reenter until a valid amount 
    public double getBetFromUser(){ 
     System.out.println("Your current pot is: "+pot); 

     System.out.print("Enter your bet amount: "); 
     bet = keyboard.nextDouble(); 

     //Rules for the bet 
     while(bet>pot || bet<0){ 
     if(pot==0){ 
      break; 
     } 
     if(bet>pot){ 
      System.out.println("Sorry, you don't have enough money for that, try again"); 
      bet = keyboard.nextDouble(); 
     } 
     if(bet<0){ 
      System.out.println("That is not a valid bet, please try again"); 
      bet = keyboard.nextDouble(); 
     } 
    } 
    return bet; 
    } 

    // Game mechanics 
    public void gamePlay(){ 
    int first= card1.getCard(); 
    int second = card2.getCard(); 
    int third = card3.getCard(); 
    System.out.println("Your first card is: "+first); 
    System.out.println("Your second card is: "+second); 
    cardTotal= first + second; 
    System.out.println("Your total is: "+cardTotal); 
    System.out.print("Enter 0 to draw more, any other number to quit: "); 
    answer = keyboard.nextInt(); 

    if(answer == 0) { 
     System.out.println("Your next card is: "+third); 
     cardTotal=cardTotal + third; 
    } 
    System.out.println("Your total is: "+cardTotal); 
} 

public void results(){ 
    if(cardTotal > 21){ 
     System.out.println("You lose your bet"); 
     pot = pot-bet; 
    } 
    if(cardTotal==21){ 
     System.out.println("You win three times your bet"); 
     pot = pot-bet+(bet*3); 
    } 
    if(cardTotal==20){ 
     System.out.println("You win double your bet amount"); 
     pot = pot-bet+(bet*2); 
    } 
    if(cardTotal<=19){ 
     System.out.println("You win your bet amount"); 
    } 
} 

public static void main(String[] args) { 
     Game game = new Game(); 
     game.getBetFromUser(); 
     game.gamePlay(); 
     game.results(); 
}  

}

+0

這沒有奏效,只是造成了更多問題 – sockowl 2014-11-14 21:04:27

+0

@sockowl這裏有一些變化。 – SkyMaster 2014-11-14 21:46:18