【问题标题】:BlackJack java random.nextInt二十一点 java random.nextInt
【发布时间】:2014-10-27 08:31:10
【问题描述】:
public class BlackJack {
    public static void main(String args[]) {
        String input;
        char reDo;
        Scanner keyboard = new Scanner (System.in);
        Random random = new Random();
        int card1 = random.nextInt(10) + 1;
        int card2 = random.nextInt(10) + 1;
        int card = random.nextInt(10) + 1;
        int total1 = card1 + card2;
        int total2 = total1 + card;

        System.out.print("First cards: " + card1 + ", " + card2 + "\n");
        System.out.print("Total: " + total1 + "\n");

        boolean loop = true;
        while (loop) {
            System.out.print("Do you want another card? (y/n): ");
            input = keyboard.nextLine();
            reDo = input.charAt(0);
            if (reDo == 'y' || reDo == 'Y') {
                System.out.print("Card: " + card + "\n");
                System.out.print("Total: " + total2 + "\n");
            } else if (reDo == 'n' || reDo == 'N') {
                loop = false;
            }
        }
    }
}

输出如下:

第一张牌:8、3
总计:11
你要另一张卡吗? (是/否):是的
卡:7
总计:18
你要另一张卡吗? (是/否):是的
卡:7
总计:18
你要另一张卡吗? (是/否):n

我希望能够在循环中生成一张新的随机卡片,显示循环总数,然后停止程序。我无法理解的问题是如何使用 random.nextInt 工具并能够更方便地重用它。目前它卡在 card1、card2、card、total1 和 total2 上。如果我可以制作它们以便我可以更轻松地访问它们,那么我认为程序会更容易编写。问题是我无法理解如何在 while 循环中重复 random.nextInt。

【问题讨论】:

  • 你不能直接调用card = random.nextInt() 作为if 正文中的第一个语句,在两个打印语句之前吗?
  • 我要试试这个,一会儿回来。
  • 在某些时候,您会想要创建一副纸牌并将其“洗牌”,然后从中抽牌,而不是随机卷起纸牌。
  • 我从顶部注释掉了 int card 和 int total2 ,并将它们都放在了 if 语句中。仍然有一个错误,我不确定下一步应该是什么。这是输出: 第一张牌:1、3 总计:4 你想要另一张牌吗? (y/n): y Card: 2 Total: 6 你想要另一张卡片吗? (y/n): y Card: 9 Total: 13 你想要另一张卡片吗? (y/n): y Card: 7 Total: 11 你想要另一张卡片吗? (是/否):n
  • @DavidConrad 这是第二级 Java 类的第三个作业。我不太确定我们应该如何解决这么多问题。虽然我在退学后要重修这门课程,但我认为作业要求的还不是那个级别。

标签: java random blackjack


【解决方案1】:

首先将所有卡片放入一副牌中。

然后生成一个介于 0 和牌组中的牌数之间的随机数。

如果deck是一个ArrayList(例如),你可以这样做

import java.util.*;


public class Main
{

    public static void main(String[] args)
    {
        List<Card> deck = new ArrayList<Card>();
        deck.add(new Card(1));
        deck.add(new Card(3));
        deck.add(new Card(7));
        deck.add(new Card(10));

        Random randomGenerator = new Random(); 

        System.out.println("Deck 1 tests");
        // draw 3 cards:
        for (int i = 0; i < 3; i++)
        {
            int randomCard = randomGenerator.nextInt(deck.size());
            Card card = deck.remove(randomCard);
            System.out.println("Removed a(n) "+card);
        }

        // you could also do
        List<Card> deck2 = new ArrayList<Card>();
        deck2.add(new Card(1));
        deck2.add(new Card(7));
        deck2.add(new Card(3));
        deck2.add(new Card(10));

        Collections.shuffle(deck2);
        System.out.println("Deck 2 tests");
        // draw 3 cards:
        for (int i = 0; i < 3; i++)
        {
            Card card = deck2.remove(0);
            System.out.println("Removed a(n) "+card);
        }


    }

}

class Card {
    public Card(int i)
    {
        blackJackValue = i;
    }

    public int blackJackValue;

    public String toString() {
        return String.valueOf(blackJackValue);
    }
}

【讨论】:

  • 我希望我能理解这一点,但我认为它对我现在的能力来说太先进了。我们还没有检查 ArrayList,我认为教授可能会因为我使用超出我水平的工作而生气。
  • 我怀疑,因为你会表现出主动性。但是,如果您想使用更基本的东西,请使用 2 个数组。一个带有值,另一个带有标志,指示第一个数组中的值是否已被使用。
  • 我尝试输入我们学校提供的程序,但无法正确编译。我认识你刚刚写的一些作品。课程的 ArrayList 部分可能还需要几周时间,所以我还不能真正提交。感谢您的帮助亚历山大!
  • 祝你好运。大多数情况下,在 IT 中,坚持不懈比聪明更重要。
  • 感谢您的建议。
猜你喜欢
  • 2016-11-09
  • 2017-04-05
  • 2012-04-25
  • 2013-10-07
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 2021-05-29
相关资源
最近更新 更多