从数组中随机取出指定个数的元素且不能取出重复的元素。

思路1:利用List来把数组保存起来,在每取出一个元素后就删除这个元素。
               /**
		 * 使用一个List来保存数组,每次随机取出一个移除一个。
		 */
		public String[] getRandomArray(int n, String[] strArray){
			List<String> list = new ArrayList<String>();
			for(int i=0; i<strArray.length; i++){
				list.add(strArray[i]);
			}
			Random random = new Random();
			
			// 当取出的元素个数大于数组的长度时,返回null
			if(n>list.size()){
				return null;
			}

			String[] result = new String[n];
			for(int i=0; i<n; i++){
				// 去一个随机数,随机范围是list的长度
				int index = random.nextInt(list.size());
				result[i] = list.get(index);
				list.remove(index);
			}

			return result;
		}
思路2:在使用一个boolean型数组保存对应数组中元素是否被取出的状态。
                /**
		 * 使用一个两个数组,一个来保存元素,一个用来保存对应元素是否被取走
		 */
		public String[] getRandomArray(int n, String[] strArray){
			// 当取出的元素个数大于数组的长度时,返回null
			if(n>strArray.length){
				return null;
			}
			
			// 定义一个域strArray相同长度的数组,每个位置保存对应位置是否被取走
			boolean[] bool = new boolean[strArray.length];
			for(int i=0; i<strArray.length; i++){
				bool[i] = false;
			}
			
			Random random = new Random();
			String[] result = new String[n];
			
			for(int i=0; i<n; i++){
				int index;
				// 判断随机的位置是否被取走,取走则继续循环
				do{
					index = random.nextInt(n);
				}while(bool[index]);
				
				// 取出元素,将其对应位置设置为true
				bool[index] = true;
				result[i] = strArray[index];
			}
			
			return result;
		}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值