作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要有关这部分代码的帮助。这部分涉及生成 2 个随机数,并使用该随机数同时在 2 个标签框中的每一个中显示一张卡片。这里的问题是随机数没有正确生成,因此卡片没有正确显示(有重复,有时不显示等)
我的代码的基础知识:让我们假设 h(来自代码另一部分的变量)是 1 到 53 之间的任何数字(每个数字都与一张卡相关)。如果生成的随机数(不重复)与变量 h 匹配,则计时器停止。
所以它基本上就像拥有一副纸牌并将纸牌均匀地发给 2 个人,但是一旦与随机抽取的纸牌(数字)相关的数字匹配,发牌就会停止。
(l3,l4是标签名称)全局变量:
Random rng = new Random();
List<Integer> generated = new ArrayList<Integer>();
List<Integer> generated2 = new ArrayList<Integer>();
int l3count;
int l4count;
int Ulim = 53;
int Llim = 1;
int next;
int check;
int h;
int next2;
int Ulim2 = 53;
int Llim2 = 1;
final int p = h;
int delay2 = 1000;
final Timer timer2 = new Timer();
timer2.schedule(new TimerTask(){
public void run(){
for (int i = 1; i < 53; i++)
{
while(true)
{
next = rng.nextInt(Ulim) + Llim;
if (!(generated.contains(next)||generated.contains(next2)))
{
generated.add(next);
break;
}
next2 = rng.nextInt(Ulim2) + Llim2;
if (!(generated.contains(next)||generated.contains(next2)))
{
generated.add(next2);
break;
}
}
String a = Integer.toString(next);
String c = "C:\\Users\\mycompname\\Desktop\\deck\\"+a+".png";
String d = Integer.toString(next2);
String e = "C:\\Users\\mycompname\\Desktop\\deck\\"+d+".png";
for(int j = 1;j<=53;j++)
{
if(j%2==0)
{l3.setIcon(new ImageIcon(c));
}
else
{l4.setIcon(new ImageIcon(e));
}
}
if(next==p||next2==p)
check=10;
break;
}
if(check==10)
timer2.cancel();
timer2.purge();
}
},delay2, 1000);
如有任何帮助,我们将不胜感激。感谢您抽出时间。
最佳答案
你最好随机发牌。
使用O(n)
Knuth Shuffle您可以一次将一张卡片从一个数组传递到另一个数组。
您将卡片传递到的每个新阵列都将是不同人的手牌。
继续从牌组阵列中每次向每个阵列添加 1 张牌,直到每个玩家拥有规则要求的牌数。
此外,不要依赖随机数是否相等。请参阅stupid-sort 。寻找其他模式。就像随机数量的卡片%cards_left一样,你应该停止分发卡片。
根据请求更新代码示例:
public static void shuffle (int[] array) {
for(int n = array.length; (n > 1);) {
int k = gen.nextInt(n--);
int temp = array[n];
array[n] = array[k];
array[k] = temp;
}
}
关于java - 两个随机数发生器(发牌),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9230952/
我是一名优秀的程序员,十分优秀!