当前位置: 首页 > 知识库问答 >
问题:

洗牌并显示 10 个 java 小程序

蒋泰
2023-03-14

在本作业中,您将使用小程序显示扑克牌的图像。小程序应该从您下载的“images”文件夹中加载一组52张扑克牌图像。小程序应该洗牌(使用随机数生成器)并显示洗牌牌组的前10张牌。将卡片分为两行,每行五张。

我的小程序部分工作,但是当我运行小程序查看器时,显示只是同一张卡十次。这是我的代码:

package CTY;

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;

public class Exercise12 extends Applet {

    Image c1;
    Image c2;
    Image c3;
    Image c4;
    Image c5;
    Image c6;
    Image c7;
    Image c8;
    Image c9;
    Image c10;

    public void init() {
        Random random = new Random();
        String cards[][] = {
                { "cards/c1.gif", "cards/c2.gif", "cards/c3.gif", "cards/c4.gif", "cards/c5.gif", "cards/c6.gif",
                        "cards/c7.gif", "cards/c8.gif", "cards/c9.gif", "cards/c10.gif", "cards/cj.gif",
                        "cards/ck.gif", "cards/cq.gif" },
                { "cards/s1.gif", "cards/s2.gif", "cards/s3.gif", "cards/s4.gif", "cards/s5.gif", "cards/s6.gif",
                        "cards/s7.gif", "cards/s8.gif", "cards/s9.gif", "cards/s10.gif", "cards/sj.gif",
                        "cards/sk.gif", "cards/sq.gif" },
                { "cards/d1.gif", "cards/d2.gif", "cards/d3.gif", "cards/d4.gif", "cards/d5.gif", "cards/d6.gif",
                        "cards/d7.gif", "cards/d8.gif", "cards/d9.gif", "cards/d10.gif", "cards/dj.gif",
                        "cards/dk.gif", "cards/dq.gif" },
                { "cards/h1.gif", "cards/h2.gif", "cards/h3.gif", "cards/h4.gif", "cards/h5.gif", "cards/h6.gif",
                        "cards/h7.gif", "cards/h8.gif", "cards/h9.gif", "cards/h10.gif", "cards/hj.gif",
                        "cards/hk.gif", "cards/hq.gif" } };

        int Card[] = new int[10];
        int Suit[] = new int[10];
        int suit = random.nextInt(4);
        int card = random.nextInt(10);
        boolean newCard = false;

        for (int i = 0; i < 10; i++) {
            while (newCard == false) {
                newCard = true;
                suit = random.nextInt(4);
                card = random.nextInt(13);

                for (int j = 0; j < i; j++) {
                    if (Card[j] == card && Suit[j] == suit ) {
                        newCard = false;
                    }
                }
            }

            Card[i] = card;
            Suit[i] = suit;
        }

        c1 = getImage(getDocumentBase(),
                cards[Suit[0]][Card[0]]);
        c2 = getImage(getDocumentBase(),
                cards[Suit[1]][Card[1]]);
        c3 = getImage(getDocumentBase(),
                cards[Suit[2]][Card[2]]);
        c4 = getImage(getDocumentBase(),
                cards[Suit[3]][Card[3]]);
        c5 = getImage(getDocumentBase(),
                cards[Suit[4]][Card[4]]);
        c6 = getImage(getDocumentBase(),
                cards[Suit[5]][Card[5]]);
        c7 = getImage(getDocumentBase(),
                cards[Suit[6]][Card[6]]);
        c8 = getImage(getDocumentBase(),
                cards[Suit[7]][Card[7]]);
        c9 = getImage(getDocumentBase(),
                cards[Suit[8]][Card[8]]);
        c10 = getImage(getDocumentBase(),
                cards[Suit[9]][Card[9]]);
    }

    public void paint(Graphics graphics) {
        graphics.drawImage(c1, 30, 30, this);
        graphics.drawImage(c2, 30, 150, this);
        graphics.drawImage(c3, 120, 30, this);
        graphics.drawImage(c4, 120, 150, this);
        graphics.drawImage(c5, 210, 30, this);
        graphics.drawImage(c6, 210, 150, this);
        graphics.drawImage(c7, 300, 30, this);
        graphics.drawImage(c8, 300, 150, this);
        graphics.drawImage(c9, 390, 30, this);
        graphics.drawImage(c10, 390, 150, this);
    }
}

共有3个答案

叶英哲
2023-03-14

问题在于循环的设置:

for (int i = 0; i < 10; i++) {
    while (newCard == false) {
        newCard = true;
        suit = random.nextInt(4);
        card = random.nextInt(13);

        for (int j = 0; j < i; j++) {
            if (Card[j] == card && Suit[j] == suit ) {
                newCard = false;
            }
        }
    }

    Card[i] = card;
    Suit[i] = suit;
}

第一次通过while循环时< code>i为0,因此它不会进入内部for循环,导致newCard保持为真。因为newCard为true,所以它不会再次通过while循环,所以变量Card和suit在外部for循环的迭代中不会改变。

一个解决方案是在while循环之前设置newCard=false

for (int i = 0; i < 10; i++) {
    newCard = false;
    while (newCard == false) {
        newCard = true;
        suit = random.nextInt(4);
        ...

这将确保它总是在外部for循环的每次迭代中进入而循环。

诸彬郁
2023-03-14

这就是你的问题:

    for (int i = 0; i < 10; i++) {
        while (newCard == false) {
            newCard = true;
            suit = random.nextInt(4);
            card = random.nextInt(13);

            for (int j = 0; j < i; j++) {
                if (Card[j] == card && Suit[j] == suit ) {
                    newCard = false;
                }
            }
        Card[i] = card;
        Suit[j] = suit;
        }

    }
澹台俊材
2023-03-14

使用循环作为newCard标志发出的问题在一次迭代后将始终为真

for (int i = 1; i <=10; i++) {
            while (newCard == false) {
                newCard = true;
                suit = random.nextInt(4);
                card = random.nextInt(13);

                for (int j = 0; j < i; j++) {
                    if (Card[j] == card && Suit[j] == suit ) {
                        newCard = false;
                    }
                }
            }

            Card[i] = card;
            Suit[i] = suit;
        }
 类似资料:
  • 我应该使用一个小程序来显示扑克牌的图像。小程序应该从您下载的“images”文件夹中加载一组52张扑克牌图像。小程序应该洗牌(使用随机数生成器)并显示洗牌牌组的前10张牌。将卡片分为两行,每行五张。当我运行程序时,它会显示这个错误。。 我不知道为什么,所以我不能修复它… 这是我的密码

  • 本文向大家介绍java和js实现的洗牌小程序,包括了java和js实现的洗牌小程序的使用技巧和注意事项,需要的朋友参考一下 这几天刚学了java和javascript,简单写了个用java和javascript的小程序 JavaScript的 java的 总结 以上所述是小编给大家介绍的java和js实现的洗牌小程序,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非

  • 大多数纸牌游戏都需要洗牌,也就是让纸牌随机排列。在第10.5节,我们看到了怎样生成随机数,但怎样利用随机数实现洗牌功能却并非显然意见的。 一种可行的方案是,模拟人洗牌的方法,将牌分为两堆,然后通过在每个牌堆中轮流选择的方式实现原牌堆的重新组织。因为一般而言,人并不能做到完美地洗牌,而程序经过大约7次迭代之后,牌堆中纸牌的顺序已经相当随机了。但是计算机程序每次在做完美洗牌的时候有一个令人讨厌的属性—

  • 到目前为止,我所有的代码都编译得很好,但是洗牌按钮使所有的牌都消失了 错误消息:线程“JavaFX Application thread”Java.lang.IllegalArgumentException:无效URL:在javafx.scene.image.image.validateurl(image.Java:1094)在javafx.scene.image.image(image.Java

  • 在第13.6节我们编写了一个洗牌算法的伪代码。假设shuffleDeck函数实现洗牌功能,其参数为一个牌堆,我们就可以这样创建牌堆并洗牌: Deck deck; // 创建一个标准的52张牌的牌堆 deck.shuffle (); // 洗牌 然后,使用subdeck函数来分几手牌: Deck hand1 = deck.subdeck (0, 4); Deck hand2 = dec

  • 问题内容: 我只是从Java小程序开始,然后发现了这个提供教程的网站。我输入了所有代码,但该小程序未显示在我的浏览器中:HelloWorld.java 这是我的HTML文件 我已经编译了Java文件(HelloWorld.class),并将所有文件保存在桌面上。我在Mac OS X美洲狮上使用的是野生动物园的最新版本。我在谷歌浏览器中尝试过,并说要安装一个插件,但是我没有做任何事情? 问题答案: