在java中编写21点和纸牌程序时遇到问题

在java中编写21点和纸牌程序时遇到问题,java,blackjack,Java,Blackjack,我已经在这个项目上工作了几天,我不明白为什么它不起作用。希望一双新的眼睛会有所帮助。当我运行这个程序时,有几件事没有发生 唯一真正起作用的是管理用户下注的部分。一些问题包括: 它不会带来卡值(应该来自随机生成1-13之间的数字的类) 不等待用户输入0以绘制更多卡片 当它说第三张卡是什么时,它说的是Card@42a57993 不提供卡的总价值 当我试图修复一个问题时,也会发生一个错误。除了cardTotal之外,错误表示“参数类型的运算符+未定义。” 它可能丢失或有额外的括号,但我找不到它们应

我已经在这个项目上工作了几天,我不明白为什么它不起作用。希望一双新的眼睛会有所帮助。当我运行这个程序时,有几件事没有发生

唯一真正起作用的是管理用户下注的部分。一些问题包括:

  • 它不会带来卡值(应该来自随机生成1-13之间的数字的类)

  • 不等待用户输入0以绘制更多卡片

  • 当它说第三张卡是什么时,它说的是
    Card@42a57993
  • 不提供卡的总价值
  • 当我试图修复一个问题时,也会发生一个错误。除了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");
    }
 }
}

}我猜您的错误发生在这里:

cardTotal= card1 + card2; 

card1
card2
Card
类型。编译器不知道如何添加它们

您应该这样获得您的卡总金额:

cardTotal = card1.cardValue+ card2.cardValue;

这可能对你有帮助。我建议您阅读如何引用对象及其方法。键盘输入数据的验证丢失,但这是您的工作:

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();
 }     
import java.util.Scanner;
公开课游戏{
私人双罐;
私人双注;
私人回答;
私人总收入;
Card card1=新卡();
Card card2=新卡();
Card card3=新卡();
//建造师
公共游戏(){
pot=100;
bet=0;
}
扫描仪键盘=新扫描仪(System.in);
//GetBetFrom user,提示用户输入有效下注,重新输入,直到达到有效金额
公共双getBetFromUser()函数{
System.out.println(“您当前的pot是:“+pot”);
System.out.print(“输入您的下注金额:”);
bet=键盘.nextDouble();
//下注规则
而(赌注>赌注| |赌注){
System.out.println(“对不起,您没有足够的钱,再试一次”);
bet=键盘.nextDouble();
}
如果(赌21){
System.out.println(“你输了赌注”);
赌注=赌注;
}
如果(cardTotal==21){
System.out.println(“你赢了三倍的赌注”);
赌注=赌注+(赌注*3);
}
如果(cardTotal==20){
System.out.println(“你赢了双倍的赌注”);
赌注=赌注+(赌注*2);
}

如果(CardTotal如果你每个问题问1个问题,你会得到更好的回答。你在这个问题中列出了5个问题。你应该关注其中一个问题。你还应该尝试一次一个地实现你的要求。在你知道随机生成额外卡的代码起作用之前,不要开始编写抽卡代码。这样,你就有了更简单的问题要解决,而不是一次解决所有的问题Card@42a57993
,compare@sockowl这取决于
卡类的定义。您需要移动
新随机()
进入一个静态初始值设定项,因此它只在程序开始时发生一次,您需要将调用从
getCard()
移动到
Card()
初始值设定项中,以使新卡的随机值不会在每次调用
getCard()时改变
。摆脱那个愚蠢的
开关
;你还没有学会数组吗?@sockowl这里有一些变化。
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();
 }