如何为扑克评估员改组两个阵列

时间:2014-07-17 18:32:22

标签: java arrays poker

我正在制作一个扑克计划。我有一些问题想弄清楚如何洗牌。我必须使用数组。我不能使用枚举或列表。我知道有更好的方法来制作这个程序,但重点是理解数组。

我有一些问题想弄清楚如何洗牌。我试图保持这个尽可能简单,所以我有一个课程来获得卡片的卡片并将它们洗牌。

import java.util.Arrays;
import java.util.Random;

public class Card 
{


    String[] suits = { "Spades", "Clubs", "Hearts", "Diamonds" };
    String[] values = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"};

    public Card()
    {

    }

        public void getCards()
        {
           for(int indexSuit = 0; indexSuit < suits.length; indexSuit++)
           {

              String suit = suits[indexSuit];
              System.out.print(suit + " ");

               for(int indexType = 0; indexType < values.length; indexType++)
               {
                  String type = values[indexType];
                  System.out.print(type + " ");
               }
           }

        }    

        public void shuffle(String[] suit, String[] value)
        {
            Random rndSuits = new Random();
            Random rndType = new Random();

            for(int indexSuit = suits.length - 1; indexSuit > 0; indexSuit--)
            {
                int index = rndSuits.nextInt(indexSuit + 1);

                String temp = suits[indexSuit];
                suits[indexSuit] = suit[index];
                suit[index] = temp;

                System.out.print(temp);

                for(int indexType = values.length -1; indexType > 0; indexType--)
                {
                    int index2 = rndType.nextInt(indexType + 1);

                    String temp2 = values[indexType];
                    values[indexType] = value[index2];
                    value[index2] = temp2;

                    System.out.print(temp2);
                }
            }
        }

        public void deal()
        {

        }
}

这是我的主要内容:

public class FiveCardPoker 
{

    public static void main(String[] args){
    Card timsCards = new Card();

    timsCards.getCards();
    timsCards.shuffle(args, args);

    }

}

我试图根据我在这里找到的另一个问题来编写shuffle方法,但它只适用于单个数组。我不确定shuffle方法的逻辑是否正确。我也不确定如何在我的main方法中调用它。

当我调用timsCards.shuffle时,如何将我的数组从Card类传到Main类?

编辑:所以我尝试过编辑它,但它似乎没有做任何事情。

public void shuffle()
        {
            Collections.shuffle(Arrays.asList(suits));
            Collections.shuffle(Arrays.asList(values));
            System.out.println(Arrays.toString(values) + " of " + Arrays.toString(suits));
        }

4 个答案:

答案 0 :(得分:1)

我能想到的理想方式是,您可以从这些数组中创建一些Collection并使用

Collections.shuffle()方法。

代码 -

 String[] suits = {"Spades", "Clubs", "Hearts", "Diamonds"};
 List<String> list = Arrays.asList(suits);
 Collections.shuffle(list);
 System.out.println(list); //Prints shuffled list

Javadoc

答案 1 :(得分:1)

关于你的上一个问题,关于如何从shuffle函数内部将数组放入main函数,你应该让你的shuffle函数返回一个数组,并像这样调用它:

shuffledCards[] = timsCards.Shuffle(...);

我意识到其他人提供了其他解决方案,但你提到的目的是理解数组,所以我想我会提到这将完成同样的事情。

另外,虽然我承认没有测试过,但似乎你的随机阵列会在每个套装内部洗牌,但不是整个套牌。您可能想要考虑更具创造性的解决方案(如果您不打算使用Collections.shuffle()

答案 2 :(得分:0)

如果你想自己写一个shuffle方法,你可以这样做。

static Random rnd = new Random();

static void shuffle(Object[] array) {
  for(int index1 = array.length - 1; index1 > 0; index1--) {
    int index2 = rnd.nextInt(index1 + 1);
    Object temp = array[index1];
    array[index1] = array[index2];
    array[index2] = temp;
  }
}

public static void main(String[] args) {
  String[] suits = { "Spades", "Clubs", "Hearts", "Diamonds" };
  String[] values = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"};

  shuffle(suits);
  shuffle(values);
}

通过这种方式,您可以随机播放任意对象的数组,而不仅仅是字符串。您可能希望用表示卡片的对象填充数组,然后将其洗牌。

答案 3 :(得分:0)

在你的例子中有几点需要改进。

  1. 首先,西装(&#34;黑桃&#34;,&#34;俱乐部&#34;,&#34;心&#34;,&#34;钻石&#34;)和值应该是使用枚举类型而不是字符串进行操作。它将更容易阅读和调试。如果需要,可以实现一个枚举数组。

  2. 只有一个随机对象足够好。如果你希望不可预知的洗牌,你应该使用种子......

  3. 如何改组每个数组是正确的,但不是全局数组。在这里你穿着西装,在西装内你洗牌,但所有的钻石都在一起...... 如果你想要洗牌(如我想象的那样)那么你应该只实现一个集合/数组:一系列卡片,每张卡片都是一对一对的套装,价值。

  4. 对于你的上一个问题,我建议实施&#39; shuffle&#39;作为一个工厂(所以它应该是静态的)返回一个洗牌的牌。如果你更喜欢对象方法(NO STATIC),那么你应该实现一个Deck类,然后shuffle将意味着改组这个套牌。