`

已知一个数组random[99],其中包含从1-100中随机抽取的99个不重复的自然数

 
阅读更多
这是一道简单的面试题,我本着是否能找出更好的方法来,在网上找了很多别人的方法,把code都copy下来运行,发现还是有错误.所以自己就写了一个累赘的例子,不过不会有错.
思路:采用Random得到1-100的随机数(因为Random取值是0<=a<1之间的数,所以采用了一个三目运算),这个面试题的难点是取出1-100中随机而又不重复的整数.然后用1-100的总和减去99个随机数的总和,这样就得到了未放进的数.
package random;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.SortedSet;
import java.util.TreeSet;

public class RandomTest2 {

	public int[] array = new int[99];
	private Object[] array1;
	private int tmp;
	int sum = 0;

	public void init() {
		Random random = new Random();

		SortedSet set = new TreeSet();//根据其特性,set集合中不会保存重复的元素
		for (int i = 0; i >= 0; i++) {
			if (set.size() > 98) {
				break;
			}
			tmp = random.nextInt(100);//得到1-100中的99个随机数
			tmp = tmp == 0 ? 100 : tmp;//将得到0转换成100
			set.add(tmp);
		}
		List list = new ArrayList();
		Iterator iterator = set.iterator();
		while (iterator.hasNext()) {
			list.add(iterator.next());
		}
		array1 = list.toArray();
	}

	public void getArray() {
		for (Object ii : array1) {
			int a = Integer.parseInt(ii.toString());
			sum += a;
		}
		System.out.println(5050 - sum);
	}

	public static void main(String[] args) {
		for (int i = 0; i < 101; i++) {
			RandomTest2 rt = new RandomTest2();
			rt.init();
			rt.getArray();
		}
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics