Java 一副牌洗牌

Java 一副牌洗牌,java,shuffle,Java,Shuffle,我试图在我的Pack类中测试我的两个函数,以模拟一副牌 public class Pack { private PlayingCard[] deck; // An array of 52 cards, representing the deck. private int cardsUsed; // How many cards have been dealt from the deck. /** * Creating an unshuffled deck

我试图在我的Pack类中测试我的两个函数,以模拟一副牌

public class Pack {

    private PlayingCard[] deck;   // An array of 52 cards, representing the deck.
    private int cardsUsed; // How many cards have been dealt from the deck.

    /**
    * Creating an unshuffled deck of cards
    */
    public Pack() {
       deck = new PlayingCard[51]; //Creates an array of 52 playing cards
       int cardCt = 0; // How many cards have been created so far.
       for ( int suit = 0; suit <= 3; suit++ ) { //If a suit is complete, move to the next suit
          for ( int value = 1; value <= 14; value++ ) { //Builds a complete suit
             deck[51] = new PlayingCard(value,suit);
             cardCt++; //Adds one to the card count
          }
       }
       cardCt = 0;
    }

    /**
    * Shuffling a deck of cards
    */
    public void shuffle() {
          // Put all the used cards back into the deck, and shuffle it into
          // a random order.
        for ( int i = 51; i > 0; i-- ) { 
            int rand = (int)(Math.random()*(i+1));
            PlayingCard temp = deck[i];
            deck[i] = deck[rand];
            deck[rand] = temp;
        }
        cardsUsed = 0;
    }

    public @Override String toString()
    {
        return Pack();
    }

    } // end class Pack

我想做的是将shuffle方法放入toString方法中,比如PlayingCard类,这样我就可以在我的packtest中测试它。我明白我不能返回无效声明,这就是我被卡住的地方。如果有人能解释我该做什么,我会非常感激。

你能猜出我在这里做什么吗<代码>:)


请注意,
void
返回类型意味着没有返回对象-该方法在被调用时只执行它的操作。

这是最佳实践洗牌方法

这是我节目中的一个非常粗略的片段

     ArrayList cardsArray = new ArrayList();
      cardsArray.Add(0);
     //generate deck
      for (int i = 1; i <= 52; i++)
      {
          cardsArray.Add(i);
     }

      // shuffle
      object t = 0;
      int s = 0;
      Random r = new Random();
      for(int i=52; i>=1; i=i-1){
      s= (r.Next(i)) +1;
          //swap
          t = cardsArray[s];
          cardsArray[s] = cardsArray[i];
          cardsArray[i] = t;
          }

    cardsArray.RemoveAt(0);
ArrayList cardsArray=new ArrayList();
cardsArray.Add(0);
//生成甲板
对于(int i=1;i=1;i=i-1){
s=(r.Next(i))+1;
//交换
t=cardsArray[s];
cardsArray[s]=cardsArray[i];
cardsArray[i]=t;
}
cardsArray.RemoveAt(0);

你所说的“将shuffle方法放入toString方法中”是什么意思?你想返回一组卡片的名称,还是它的状态的一些指示器?我想最终在测试仪中打印出52张随机卡片,所以我想既然我在PlayingCard类中使用了toString方法,我会为pack类再次这样做。所以pack.toString()应该打印出52张牌的名字吗?啊,忽略return Pack()语句,它不起作用,我忘了删除它。不确定OP为什么要在toString方法中使用shuffle方法?如果这只是为了测试目的,那么它应该是好的,但是他可能应该保留这个函数,只打印洗牌组,而不在这个函数中包含洗牌。是的,没错。我会把它加到便条上。编辑:别这样我认为你击中了它的头:)
public class Pack {

    // .. other code ..

    public @Override String toString() {

        // see note below
        // shuffle();

        StringBuilder sb = new StringBuilder();
        sb.append("The cards are: ");
        for (int i = 0; i < deck.length; i++) {
            if (i > 0) sb.append(", ");
            sb.append(deck.toString());
        }
        sb.append(".");
        return sb.toString();
    }
}
Pack myPack = new Pack();
myPack.shuffle();
System.out.println(myPack); // this automatically calls toString()
     ArrayList cardsArray = new ArrayList();
      cardsArray.Add(0);
     //generate deck
      for (int i = 1; i <= 52; i++)
      {
          cardsArray.Add(i);
     }

      // shuffle
      object t = 0;
      int s = 0;
      Random r = new Random();
      for(int i=52; i>=1; i=i-1){
      s= (r.Next(i)) +1;
          //swap
          t = cardsArray[s];
          cardsArray[s] = cardsArray[i];
          cardsArray[i] = t;
          }

    cardsArray.RemoveAt(0);