JAVA-数组乱序

实现步骤

  1. 假设有一组数组numbers
  2. 从数组中最后一个元素开始遍历
  3. 设置一个随机数作为循环中遍历到的元素之前的所有元素的下标,即可从该元素之前的所有元素中随机取出一个
  4. 每次将随机取出的元素与遍历到的元素交换,即可完成乱序

实例如下: 

import java.util.Arrays;
public class R18 {
	public static void main(String[] args) {
		int[] numbers= {12,34,23,56,17,27};
		for(int k=0;k<2;k++) {
		for(int i=numbers.length-1;i>0;i--) {
			int index=(int)(Math.random()*i);
			numbers[index]=numbers[i]^numbers[index];
			numbers[i]=numbers[i]^numbers[index];
			numbers[index]=numbers[i]^numbers[index];
		}
			}
		System.out.println(Arrays.toString(numbers));
		String[] playMusicList = { "1反方向的钟", "2七里香", "3半岛铁盒", "4双节棍", "5晴天", "6青花瓷", "7一路向北", "8稻香" };
		for(int i=playMusicList.length-1;i>0;i--) {
			int index=(int)(Math.random()*i);
			 String temp=playMusicList[i];
			 playMusicList[i]=playMusicList[index];
			 playMusicList[index]=temp;
		}
		System.out.println(Arrays.toString(playMusicList));
		String[] role = { "安琪拉", "白起", "妲己", "狄仁杰", "典韦", "韩信", "老夫子", "刘禅", "鲁班七号", "墨子", "孙膑", "孙尚香", "孙悟空", "项羽",
				"亚瑟", "周瑜", "庄周", "蔡文姬" };
		for(int i=role.length-1;i>0;i--) {
			int index2=(int)(Math.random()*i);
			String temp1=role[index2];
			role[index2]=role[i];
			role[i]=temp1;
		}
		System.out.println(Arrays.toString(role));
		int[] numbers2=new int[7];	
	}	
}

代码执行结果:

[23, 17, 56, 12, 27, 34]
[2七里香, 7一路向北, 8稻香, 3半岛铁盒, 4双节棍, 5晴天, 6青花瓷, 1反方向的钟]
[墨子, 妲己, 庄周, 安琪拉, 孙膑, 周瑜, 孙尚香, 亚瑟, 老夫子, 刘禅, 韩信, 典韦, 项羽, 狄仁杰, 白起, 孙悟空, 蔡文姬, 鲁班七号]

洗牌算法

洗牌算法也是用数组乱序的方法实现 ,实例如下:

import java.util.Arrays;
public class R21 {
	public static void main(String[] args) {
		String[] num= {"A","2","3","4","5","6","7","8","9","10","j","q","k"};
		String[] num1= {"♥","♠","♦","♣"};
		String[] num3=new String[num.length*num1.length];
		String[] num4=new String[num3.length/4];
		String[] num5=new String[num3.length/4];
		String[] num6=new String[num3.length/4];
		String[] num7=new String[num3.length/4];
		int counter=0;
		int index=0;
		for(int i=0;i<num.length;i++) {
			for(int k=0;k<num1.length;k++) {
				num3[index++]=num[i]+num1[k];
			}
			
		}
		//整10次牌,即实现10次乱序
		for(int n=0;n<10;n++);{
		for(int m=0;m<num3.length-1;m++) {
			int index1=(int)(Math.random()*m);
			String temp1=num3[index1];
			num3[index1]=num3[m];
			num3[m]=temp1;
		}
			}
		for(int j=0,z=1,x=2,v=3;j<num3.length;j=j+4,z=z+4,x=x+4,v=v+4) {
			
			num4[counter]=num3[j];
			num5[counter]=num3[z];
			num6[counter]=num3[x];
			num7[counter]=num3[v];
			counter++;			
		}
		System.out.println("玩家1:"+Arrays.toString(num4));
		System.out.println("玩家2:"+Arrays.toString(num5));
		System.out.println("玩家3:"+Arrays.toString(num6));
		System.out.println("玩家4:"+Arrays.toString(num7));
	}
}

执行结果如下: 

玩家1:[10♠, j♣, 4♠, 4♣, 4♥, 6♦, 10♦, j♦, 5♥, A♦, 3♦, k♥, 10♥]
玩家2:[7♣, q♣, 2♣, 6♠, 5♣, 6♥, 9♥, q♠, 9♦, 8♥, 8♦, 7♠, A♠]
玩家3:[A♣, 3♣, 10♣, q♦, j♥, 5♦, 9♣, 7♥, 2♠, 5♠, 8♣, 2♦, 9♠]
玩家4:[k♦, 3♥, q♥, 6♣, 3♠, 7♦, 8♠, j♠, 2♥, 4♦, A♥, k♠, k♣]

 

 

 

 

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值