gpt4 book ai didi

java - 获取 10 个不重复的随机整数?

转载 作者:行者123 更新时间:2023-12-02 04:39:58 25 4
gpt4 key购买 nike

我正在开发一个小程序,该程序可以从一副 52 张卡片中随机显示 10 张卡片。我使用 for 循环循环浏览 10 张卡片,并从我下载的图像中随机给他们一张卡片。当我编译并运行小程序时,有时会出现重复。有人可以给我任何指示,告诉我如何在不重复的情况下解决这个问题吗?

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

public class Unit12Assignment1 extends Applet
{
Image card[] = new Image[10];

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

for( int i = 0; i < card.length; i++ )
{
int x = (int)(Math.random() * 52);
card[i] = getImage(getDocumentBase(), deckImages[x]);
}

}

public void paint(Graphics g)
{
setBackground( Color.green );
int x = -60;

for( int i = 0; i < card.length / 2; i++ )
{
x = x + 90;
g.drawImage(card[i], x, 30, this);
}

x = -60;

for( int i = card.length / 2; i < card.length; i++ )
{
x = x + 90;
g.drawImage(card[i], x, 150, this);
}
}
}

最佳答案

有多种可能性。您可以检测重复性,并在这种情况下生成新索引,直到获得唯一的索引。其他选项可以是打乱索引数组,然后取前 10 个索引。发挥创意,这不是一项艰巨的任务。

另一种可能性:

// TODO initialize this to -1
int chosen[] = new int[10];
for( int i = 0; i < card.length; i++ )
{
int x = (int)(Math.random() * 52);

for(int j=0; j< chosen.length; j++)
if(x==chosen[j])
{
x++;
j=0;
if(x>51)
x=0;
}
card[i] = getImage(getDocumentBase(), deckImages[x]);
chosen[i] = x;
}

这不是严格随机的,但即使您遇到实现如下的随机数生成器,您也可以确定它确实会结束:return 42;

关于java - 获取 10 个不重复的随机整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30291794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com