Java利用Math.random()方法实现洗牌功能(52张牌)
通过Java循环来实现洗牌功能。
程序:
public class Test1 { public static void main(String[] args) { final int N = 52; int[] nums = new int[N]; String[] flower = {"黑桃","红心","方块","梅花"};//花色数组 String[] number = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};//牌面数组 for(int i=0;i<N;i ){ //给数组赋值 nums[i] = i; } System.out.println("洗牌前:"); for (int i = 0; i < nums.length; i ) { //详情请看1. if((i 1)%13==0){ System.out.printf("%s-%st",flower[ nums[i]/13 ],number[ nums[i]%13 ]); System.out.println(); }else{ System.out.printf("%s-%st",flower[ nums[i]/13 ],number[ nums[i]%13 ]); } } System.out.println("洗牌后:"); for(int i=0;i<nums.length;i ){ //详情请看2. int a = (int)(Math.random()*N); int temp = nums[i]; nums[i] = nums[a]; nums[a] = temp; } for (int i = 0; i < nums.length; i ) { if((i 1)%13==0){ System.out.printf("%s-%st",flower[ nums[i]/13 ],number[ nums[i]%13 ]); System.out.println(); }else{ System.out.printf("%s-%st",flower[ nums[i]/13 ],number[ nums[i]%13 ]); } } } }
//详情请看1.:
用for循环打印出52张扑克牌,这里一行要求输出13张牌,所以用了if( (i 1)% 13 ==0)就换行。
52张牌,4种花色,13张牌面。比如洗牌前是按照0~51的顺序来排列。
拿35做例子:nums[35]=35,flower[ nums[35]/13 ] = flower[2]===>方块
nums[35]=35,muber[ nums[35]%13 ] = number[9]===>10
所以nums[35]对应的就是”方块-10″。
//详情请看2.:
洗牌以为这样牌的排序是随机的,这里用到了Math类中random()方法,范围:[ 0.0,1.0)的double类型数字,通过转换变成int类型,然后乘52范围就变成[0,52)的整数。
生成随机数就和原数组进行交换,这是最基本交换语法,很实用。