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

思路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;
		}

猜你喜欢

转载自blog.csdn.net/howard_allen/article/details/81028250
今日推荐