import java.util.Arrays;
import java.util.Random;public class BasicDebug {
public static void main(String[] args) {
//用于保存产生的随机数是否已用
boolean[] isExist = new boolean[52];
Random r = new Random();
//存储不重复0-51之间的随机数
int[] card = new int[52];
//保存产生的随机数
int temp;
int count = 0;
boolean flag = false;
while (count < 52) {
temp = r.nextInt(52);
flag=false;
//判读产生的随机数是否已经存在了
for (int i = 0; i < 52; i++) {
if (isExist[i]) {
flag = true;
//如果已经找到就不用继续找了
break;
}
}
//产生的随即数已经存在,将进入下一循环
if(flag) continue;
//将产生的随机数,设为已经存在
isExist[temp] = true;
card[count++] = temp;
System.out.print(temp + "\t");
}
System.out.println();
//为了清楚的显示产生的随机数,进行了排序
Arrays.sort(card);
for (int j : card) {
System.out.print(j + "\t");
}
}
}
import java.util.Random;public class BasicDebug {
public static void main(String[] args) {
//用于保存产生的随机数是否已用
boolean[] isExist = new boolean[52];
Random r = new Random();
//存储不重复0-51之间的随机数
int[] card = new int[52];
//保存产生的随机数
int temp;
int count = 0;
boolean flag = false;
while (count < 52) {
temp = r.nextInt(52);
flag=false;
//判读产生的随机数是否已经存在了
for (int i = 0; i < 52; i++) {
if (isExist[i]) {
flag = true;
//如果已经找到就不用继续找了
break;
}
}
//产生的随即数已经存在,将进入下一循环
if(flag) continue;
//将产生的随机数,设为已经存在
isExist[temp] = true;
card[count++] = temp;
System.out.print(temp + "\t");
}
System.out.println();
//为了清楚的显示产生的随机数,进行了排序
Arrays.sort(card);
for (int j : card) {
System.out.print(j + "\t");
}
}
}
楼主【adrain_sengtang】截止到2008-07-14 16:03:30的历史汇总数据(不包括此帖):
发帖的总数量:7 发帖的总分数:200 每贴平均分数:28
回帖的总数量:10 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:7 结贴的总分数:200
无满意结贴数:1 无满意结贴分:20
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:14.29 % 无满意结分率:10.00 %
敬礼!
import java.util.Iterator;
import java.util.Random;
import java.util.Set;public class Test {
public static void main(String[] args) {
Set<Integer> s = new HashSet<Integer>();
Random r = new Random();
int size = s.size();
while (size != 52) {
int rdm = r.nextInt(100);
s.add(new Integer(rdm));
size = s.size();
}
Iterator<Integer> iter = s.iterator();
while (iter.hasNext()) {
Integer tmp = iter.next();
System.out.print(tmp.intValue() + " ");
}
}
}可以考虑使用HashSet
红桃按照从小到大依次为:1-13 方块按照从小到大依次为:14-26 黑桃按照从小到大依次为:27-39 梅花按照从小到大依次为:40-52 小王为53,大王为54
算法实现如下:
首先按照以上编号规则初始化一个包含108个数字的数组每次随机从该数组中抽取一个数字,分配给保存玩家数据的数组
实现该功能的代码如下所示:
import java.util.*;
/**
* 发牌算法的实现
* 要求:把2副牌,也就是108张,发给4个人,留8张底牌
*/
public class Exec{
public static void main(String[] args){
//存储108张牌的数组
int[] total = new int[108];
//存储四个玩家的牌
int[][] player = new int[4][25];
//存储当前剩余牌的数量
int leftNum = 108;
//随机数字
int ranNumber;
//随机对象
Random random = new Random();
//初始化数组
for(int i = 0;i < total.length;i++){
total[i] = (i + 1) % 54;
//处理大小王编号
if(total[i] == 0){
total[i] = 54;
}
}
//循环发牌
for(int i = 0;i < 25;i++){
//为每个人发牌
for(int j = 0;j < player.length;j++){
//生成随机下标
ranNumber = random.nextInt(leftNum);
//发牌
player[j][i] = total[ranNumber];
//移动已经发过的牌
total[ranNumber] = total[leftNum - 1];
//可发牌的数量减少1
leftNum--;
}
}
//循环输出玩家手中的牌
for(int i = 0;i < player.length;i++){
for(int j = 0;j < player[i].length;j++){
System.out.print(" " + player[i][j]);
}
System.out.println();
}
//底牌
for(int i = 0;i < 8;i++){
System.out.print(" " + total[i]);
}
System.out.println();
}
}运行结果:
C:\java>java Exec
50 31 52 24 10 29 29 32 36 46 8 28 27 41 17 17 38 41 46 18 34 24 4 21 6
22 53 54 42 16 48 38 35 31 2 45 26 47 32 51 9 49 45 34 27 3 11 54 25 1
37 5 10 13 39 42 36 6 47 4 30 37 20 12 14 8 3 40 30 12 23 52 43 9 23
15 49 14 35 7 44 33 40 48 44 1 19 43 39 20 15 7 51 26 11 2 8 16 21 18 5
25 2 50 53 33 19 22 13
就是从0-51中抽取数,然后放到card数组里
只所以对card进行了排序,是想看是不是放的不重复并且全抽出来了
import java.util.Random;public class BasicDebug {
public static void main(String[] args) {
// 用于保存产生的随机数是否已用
boolean[] isExist = new boolean[52];
Random r = new Random();
// 存储不重复0-51之间的随机数
int[] card = new int[52];
// 保存产生的随机数
int temp;
int count = 0;
while (count < 52) {
temp = r.nextInt(52);
// 判读产生的随机数是否已经存在了,产生的随即数已经存在,将进入下一循环
if (isExist[temp]) continue;
//将产生的随机数,设为已经存在
isExist[temp] = true;
card[count++] = temp;
System.out.print(temp + "\t");
}
System.out.println();
//为了清楚的显示产生的随机数,进行了排序
Arrays.sort(card);
for (int j : card) {
System.out.print(j + "\t");
}
}
}
for (int i = 0; i < 52; i++) {
if (isExist[i]) {
flag = true;
//如果已经找到就不用继续找了
break;
}
}