【问题标题】:Java, deck of cards, card class, need to get it all working togetherJava,纸牌,卡片类,需要让它们一起工作
【发布时间】:2014-09-25 06:35:12
【问题描述】:

我有一个暑期班的作业。仅供参考,总的来说,我对编程非常陌生,这是我第一次使用 java,这是一个暑期课程,所以它的速度非常快(请友好!)哈哈。

基本上我开始在一个类中编写我的代码,然后我将它分成一个 Card 类和一个 DeckOfCards 类,我现在需要弄清楚如何让它们一起工作。有时我对调用方法有点困惑,尤其是在使用单独的类时。我想我只需要一种方法来分发五张牌,同时告诉牌组中还剩下多少张牌。然后让它们一起正常工作。另外,我需要一个 toString 方法,但老实说我不知道​​该怎么做。任何帮助是极大的赞赏!如果您也可以帮助解释事情,那就太棒了!我认为我的一切都是正确的,但我可能是错的,我确信有更好的方法来编写代码,我也会接受任何建议以使外观更清晰。仅供参考,我认为教授宁愿数组而不是枚举,因为我们现在正在处理数组。

这里是路线... 设计并实现一个名为 Card 的类,它表示标准扑克牌。每张牌都有花色和面值。然后创建一个名为 DeckOfCards 的类,该类存储 Card 类的 52 个对象。包括洗牌、发牌和报告牌组中剩余牌数的方法。洗牌方法应该假设一个完整的牌组。创建一个驱动程序类 (CardsGame),它的主要方法是从洗好的牌堆中处理五张牌,并在每张牌发出时打印每张牌。确保为这两个类编写适当的构造函数、getter、setter、toString 和其他方法。

主类,CardsGame 类

import java.util.Scanner;

public class CardsGame {
    public static void main (String [] args) {  

   }
}    

卡类

class Card {
   public static final int SPADE   = 4;
   public static final int HEART   = 3;
   public static final int CLUB    = 2;
   public static final int DIAMOND = 1;

   private int rank;
   private int suit;
   private static final String[] Suit = {"Hearts", "Clubs", "Spades", "Diamonds"};
   private static final String[] Rank = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};                     

   private int cardSuit;
   private int cardRank;

   public Card(int suit, int rank) {
      if (rank == 1)
         cardRank = 14;     // Give Ace the rank 14
      else
         cardRank = (int) rank;
         cardSuit = (int) suit;
   }

   public int suit() {
      return this.cardSuit;         
   }

   public String suitStr() {
      return(this.Suit[ this.cardSuit ]);                                
   }

   public int rank() {
      return this.cardRank;
   }

   public String rankStr() {
      return ( Rank[ cardRank ] );
   }


   public String toString() {
      return ( Rank[ cardRank ] + Suit[ cardSuit ] );
   }
}

DeckOfCards 类

class DeckOfCards {
   public static final int NEWCARDS = 52;
   private Card[] deckOfCards;         // Contains all 52 cards
   private int currentCard;            // deal THIS card in deck

public DeckOfCards( ) {
  deckOfCards = new Card[NEWCARDS];
  int i = 0;

  for ( int suit = Card.DIAMOND; suit <= Card.SPADE; suit++ )
     for ( int rank = 1; rank <= 13; rank++ )
         deckOfCards[i++] = new Card(suit, rank);
         currentCard = 0;
 }


   //shuffle(n): shuffle the deck
   public void shuffle(int n) {
      int i, j, k;
      for ( k = 0; k < n; k++ ) {
          i = (int) ( NEWCARDS * Math.random() );  // Pick 2 random cards
          j = (int) ( NEWCARDS * Math.random() );  // in the deck?

  //swap these randomly picked cards
      Card temp = deckOfCards[i];
      deckOfCards[i] = deckOfCards[j];
      deckOfCards[j] = temp;
   }
  currentCard = 0;   // Reset current card to deal
  }
}

【问题讨论】:

  • 那么您需要在 main 中编写代码来确定它是否真的按照您想要的方式正确响应...
  • 这段代码写了很多遍,网上肯定有。虽然我建议你先阅读一个关于 Java 类和方法的不错的教程。
  • 老兄,如果你不喜欢自己解决这个问题,那就找点你喜欢做的事情吧。我们大多数人都喜欢编码。喘口气,花点时间,玩得开心。
  • 这不是不喜欢它的问题,我只是想不通。我实际上只上过 5 节课,而且是暑期班。如果我知道如何解决问题,我就不会在这里发帖了。

标签: java class methods call shuffle


【解决方案1】:

如何让它们一起工作?

如何实例化一副纸牌?

要实例化一副纸牌,请使用以下代码DeckOfCards deck = new DeckOfCards();

如何调用这个类的方法?

要调用 DeckOfCards 类中的方法,您首先需要实例化一个 DeckOfCards 类型的对象(我们刚刚做了)。然后,你只需引用实例化的变量名(deck),放一个.,并调用方法名。

public class CardsGame {
    public static void main (String [] args) {  
        DeckOfCards deck = new DeckOfCards();
        //call shuffle
        deck.shuffle();
   }
}

DeckOfCards 类结构

目前,我不相信您在 DeckOfCards 中编写的方法是可访问的。函数 shuffle() 应该放在构造函数的之外。如果您想在构造函数中调用它,只需调用 shuffle();

toString

这是 DeckOfCards 的 toString 方法示例

(注意这个应该放在构造函数之后)

@Override public String toString() {
  return "DeckOfCards";
}

【讨论】:

  • 我不需要创建交易方法吗?应该放在构造函数中我知道我的问题可能看起来很愚蠢,但是我必须调用我创建的每一个方法吗?我看到你实例化了 DeckOfCards 但我必须对 deckOfCards 类中的卡片类做同样的事情吗?我不确定 Cards 类和 DeckOfCards 类是否一起工作。还有,toString方法是不是只需要返回“DeckOfCards”?
  • @user3862586 我不会为你做作业,跳过了你的作业说明。我给了你一个关于如何实例化对象并用它调用函数的基本示例。如果一副牌应该包含 Card 对象,那么是的,您应该实例化 52 个 Card 类型的对象并将它们添加到数组中。 toString 可以返回您希望它返回的任何内容。编辑:不,如果你不想,你不必调用函数。
  • 我绝不是要你做我的功课我自己已经做了很多我只是很难让所有东西协同工作。我不希望您编写我只是希望解释如何使其工作的代码。
猜你喜欢
  • 2017-08-24
  • 1970-01-01
  • 2021-08-11
  • 2010-10-25
  • 1970-01-01
  • 2015-04-21
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多