十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
例如:有数组a = [1,2,3,4,5,6,7,8,9,10],使用首先产生一个0~10(不包含10)的随机数,用来做数组下标。
成都创新互联公司是一家专业从事网站制作、成都做网站的网络公司。作为专业的建站公司,成都创新互联公司依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、营销型网站建设及网站设计开发服务!
Random r = new Random();
int rand = r.nextInt(10);//0~10之间的随机数,但不包含10。
假如rand=3。我们把a[3]放到之前创建好的数组里,你要取5张牌,这个数组就5个长。
然后把a[3]与a[9]的位置交换,交换之后的数组为a=[1,2,3,10,5,6,7,8,9,4]
再次获取随机数,但这里获取的是0~9之间的随机数。
int rand = r.nextInt(9);
rand的值不可能是9,那么下标为9的元素就不可能出现,也就不会重复。
假如这次rand=6,再把a[6]放到之前创建好的数组里。
再把a[6]与a[8]交换,交换之后的数组为a=[1,2,3,10,5,6,9,8,7,4]
再获取随机数时int rand = r.nextInt(8),那么rand就不可能是8或9。以此类推。
===========
import java.util.Arrays;
import java.util.Random;
public class Test {
public static void main(String[] args) {
int[] puKe = new int[54];
for(int i = 0; i puKe.length; i++) {
puKe[i] = i + 1;
}
int[] pai = faPai(puKe, 5);
Arrays.sort(pai);
System.out.println(Arrays.toString(pai));
}
public static int[] faPai(int[] puKe, int num) {
int[] pai = new int[num];//用来装载取出的牌,5个长。
int m = 0;//一共取5张,m表示当前取到第几张
int n = puKe.length;//随机数的范围,默认是0~n之间取随机数
Random r = new Random();
for(int i = 0; i num; i++, n--) {
int rand = r.nextInt(n);//rand为0~n之间的随机数
pai[m++] = puKe[rand];//用随机数做下标,把牌放到pai数组中,然后m++
// rand位置上的牌与n-1位置上的牌交换,因为n再自减,所以n-1也在自减。
int temp = puKe[n - 1];
puKe[n - 1] = puKe[rand];
puKe[rand] = temp;
}
return pai;
}
}
=============
如果你有扑克牌图片,那么就可以把获取到的int[]中的元素做为图片数组的下标了。
送你一个全套洗牌加排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class CardSort {
private static String[] cards = new String[54];
ListString listCards = new ArrayListString();
public CardSort(){
Scanner sc = new Scanner(System.in);
System.out.print("是否发牌:(N不发牌,其他继续)");
while(!"n".equalsIgnoreCase(sc.nextLine())){
createCard();
randomCard();
outCart();
System.out.println();
System.out.println();
System.out.println();
System.out.println("排序后的牌为:");
sortCard();
outCart();
System.out.print("是否发牌:(N不发牌,其他继续)");
};
}
public static void main(String[] args) {
new CardSort();
}
//造牌
public void createCard(){
String[] king = {"大王","小王"};
String[] number = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
String[] cardColor = {"黑桃","草花","红桃","梅花"};
for(int i=0;icardColor.length;i++){
for(int j=0;jnumber.length;j++){
cards[i*13+j] = cardColor[i]+number[j];
}
}
cards[52] = king[0];
cards[53] = king[1];
}
//洗牌
public void randomCard(){
Random r = new Random();
String tempCard ="";
int randomNum = 0;
for(int i=54;i1;i--){
randomNum = r.nextInt(i);
tempCard =cards[i-1];
cards[i-1] = cards[randomNum];
cards[randomNum] = tempCard;
}
listCards.clear();
for(String card:cards){
listCards.add(card);
}
}
//输出牌
public void outCart(){
int tabLine = 0;
for(String list:listCards){
tabLine++;
System.out.print(list+"\t");
if(tabLine%10==0){
System.out.println();
}
}
System.out.println();
}
//排序
public void sortCard(){
Collections.sort(listCards, new ComparatorString(){
@Override
public int compare(String o1, String o2) {
int magicO1 = StringToInt(o1);
int magicO2 = StringToInt(o2);
return magicO2-magicO1;
}
private int StringToInt(String o){
char splitS1 = o.charAt(0);
char splitS2 = o.charAt(1);
int step1 = splitS1*2 - splitS2;
int step2 = 0;
if(o.length()==2){
step2 =step1 + 300000 - splitS1 *10;
}else{
int splitNum = 0;
String splitS3 = o.substring(2, o.length());
if("A".equals(splitS3)){
splitNum =1 ;
}else if("J".equals(splitS3)){
splitNum =11;
}else if("Q".equals(splitS3)){
splitNum =12;
}else if("K".equals(splitS3)){
splitNum =13;
}else{
splitNum = Integer.parseInt(splitS3);
}
step2 = step1-splitNum;
}
return step2;
}
});
}
}
修改的部分我加了#########你看一下吧
//这个初始化方法
publicvoidinitcard()
{
String num[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
String suit[]={"方块","梅花","红桃","黑桃"};
String bigwang,xiaowang;
card = newCardClass[54];//#######初始化54张而不是52张
for(inti=0;i52;i++)
{
card[i] = newCardClass(num[i%13],suit[i/13]);
}
car[52] = new CardClass("大王","");//#####初始化大王
car[53] = new CardClass("小王","");//######初始化小王
}
publicvoidshufflecard()//洗牌
{
Random rd = newRandom();
for(inti=0;i54;i++) //##########由52变为54
{
int j = rd.nextInt(54);//生成随机数 #######52变54
CardClass temp = card[i];//交换
card[i]=card[j];
card[j]=temp;
}
}
publicvoiddealcard()//发牌
{
for(inti=0;i54;i++)//##########由52变成54
{
if(i%12==0) System.out.println("\n");
System.out.print(card[i]);
}
}
public class PlayCard {
private ListInteger list;
/**
* JAVA编程创建一个List集合cards,再54张扑克牌存放到其中
* (1)用3种不同方法输出54张牌;
* (2)调用Collections方法随机分派54张牌
*/
public PlayCard() {
list = new ArrayListInteger();
for(int i=1;i55;i++){
list.add(i);
}
}
public void showPlayCard(){
System.out.println("方式一");
for(Integer i : list){
System.out.print(i+"\t");
}
System.out.println("方式二");
for(int i=0;ilist.size();i++){
System.out.print(list.get(i)+"\t");
}
System.out.println("方式三");
Iterator Integer it = list.iterator();
while(it.hasNext()){
System.out.print(it.next()+"\t");
}
}
// TODO调用Collections方法随机分派54张牌
public void randomPlayCards(){
// 把牌打乱
Collections.shuffle(list);
}
public static void main(String[] args) {
PlayCard p = new PlayCard();
p.randomPlayCards();
p.showPlayCard();
}
}