【问题标题】:Shuffling a deck of cards until getting a specific number洗牌一副牌直到得到一个特定的数字
【发布时间】:2014-08-27 08:39:42
【问题描述】:

我还是新手,我在这个项目中遇到了困难。我需要洗牌并得到前四张牌并计算四张牌的总和。到目前为止,我已经完成了这项任务。现在我的问题是我需要重复这个方法,直到我能得到 24 的总数。我很难知道如何循环这个方法。这是我到目前为止所做的代码:

public class cards
{
    public static void main(String[] args)
    {
       int[] deck = new int[52];
       String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"};
       String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};
       int rankedVal[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
       int tot = 0;
            if (tot != 24){  
       //Initialize cards
    tot = 0;
   for (int i = 0; i < deck.length; i++)
        deck[i] = i;



   //Shuffle cards    
    for (int i = 0; i < deck.length; i++)
   {
        int index = (int)(Math.random() * deck.length);
        int temp = deck[i];
        deck[i] = deck[index];
        deck[index] = temp;
   }

    //Display first four                
    for (int i = 0; i < 4; i++)
   {
        String suit = suits[deck[i] / 13];
        String rank = ranks[deck[i] % 13];
        System.out.println("Card number " + deck[i] + ": " + rank + " of " + suit);
   }  

     //find the total 
           for (int i = 0; i<4;i++){
        tot = tot + rankedVal[deck[i] % 13];
    }


 System.out.println("Total Hand = " + tot);
}
}              

}

【问题讨论】:

  • 你知道你用的是什么编程语言吗?
  • 好问题@Jongware..copy/paste?
  • @BeEasyImNoob..到目前为止您已经完成了,但您不知道如何在提取和求和中循环?
  • 我猜是Java。一副纸牌和它的操作经常困扰新程序员,但我更担心表示和操作而不是计算一个总和......。

标签: java arrays loops


【解决方案1】:

我将使用更通用的代码,因为不同的表示适合不同的程序员,但这应该适用于任何东西:

int sum = 0;
While (sum != 24)
{
    Shuffle();
    sum = deck[0].value + deck[2].value + deck[3].value + deck[4].value;
}

如果你制作一组卡片并在洗牌时在成对之间交换会更好,卡片中包含整数值。初始化一次,然后全部交换对象。是 Java,不是吗?

【讨论】:

  • 交换可以这样:a^=b; b^=a; a^=b;.如果你在笔和纸上用钻头做,你会发现方法的独创性。另一种是a = a+b; b = b-a; a = a-b;
【解决方案2】:

在不剧透的情况下,您可以在 while 循环中使用条件,直到达到 24,例如:

do
{
    // Get 4 cards and add sum.
 } while (sum < 24);

您还需要检查您没有用完卡,因此改进措施是:

int cardsUsed = 0
do
{
   // Get 4 cards and add sum.
   cardsUsed += 4;
} ((sum < 24) or (cards_used >= 52));

【讨论】:

    【解决方案3】:

    这就是为什么您应该学习如何使用方法和子例程。如果您使用的是 Java,那么您肯定应该首先学习一点面向对象编程的知识。如果您不了解 OOP,我不会推荐 Java 作为初学者语言。可以选择 C ​​或 Python。

    public class cards
    {
        int[] deck = new int[52];
        String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"};
        String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};
        int rankedVal[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
    
        void init() {
           // initialise logic
           for (int i = 0; i < deck.length; i++)
               deck[i] = i;
        }
    
        void shuffleCards() {
           for (int i = 0; i < deck.length; i++) {
            // Shuffle logic
           }
        }
    
        void displayFirstFour() {
           // display logic
        }
    
        int sumFirstFour() {
          int sum = 0;
          // logic to sum first four cards
          return sum;
        }
    
        public static void main(String[] args)
        {
           init();
           int total = 0;
           // LOOP. NOT 'if' . 'if' simply tests condition once and moves on
           // loop tests condition continually until true
           while(total != 24) {
             //Shuffle cards    
             shuffleCards();  
             //Display first four                
             displayFirstFour();
             total = sumFirstFour();
           }
           System.out.println("Total Hand = " + total);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多