日期:2014-05-20 浏览次数:20942 次
//一般做法 int[] ran = new int[10]; int seed = 10; ran[0] = (int)(Math.random()*seed); //任意获得一个随即数 for (int i=1; i<ran.length; i++) { ran[i] = ran[i-1] + ((int)(Math.random()*seed + 1)); //按升序追加随即数可保证不重复 } for (int i=0; i<ran.length; i++) { //如果不希望按升序出现,就打乱位置 int idx = (int)(Math.random()*ran.length); int tmp = ran[idx]; ran[idx] = ran[ran.length-idx-1]; ran[ran.length-idx-1] = tmp; } System.out.println(Arrays.toString(ran)); //特殊情况做法 //如果你的10个数从某个范围中获取 int max = 100; //范围 List<Integer> list = new LinkedList<Integer>(); for (int i=0; i<max; i++) { list.add(i); } int[] ran = new int[10]; for (int i=0; i<ran.length; i++) { ran[i] = list.remove(((int)Math.random()*list.size())); } System.out.println(Arrays.toString(ran));
------解决方案--------------------
public class ProduceRandom { public static int MIN = 100; public static int MAX = 200;//不包含MAX public static void main(String[] args) { Set<Integer> integers = new HashSet<Integer>(); while (integers.size() < 10) integers.add((int)(Math.random()*(MAX-MIN))+MIN);//假设只产生整数,不产生浮点数等其他类型的数 Object[] intArray = integers.toArray(); System.out.println(Arrays.toString(intArray) ); } }
------解决方案--------------------
import java.util.ArrayList; import java.util.List; public class RandomTest { /**产生1到10的10个不同的随机数到数组里 * @param args */ public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 10; i++) { int num = (int)(Math.random() * 10); //如果有重复就跳过本次 boolean isHave=false; for (int j = 0; j < list.size(); j++) { if (num == list.get(j)) { isHave=true; break; } } if(!isHave) { list.add(num); } } System.out.println(list); } }
------解决方案--------------------
//如果不使用集合,请仿照下面的写法 public class ProduceRandom { public static void main(String[] args) { Integer[] intArray = getRandomArray(100, 200, 10); for (Integer i : intArray) { System.out.print(i + " "); } } /** * @param MIN:下界 * @param MAX:上界 * @param SUM:总个数 * @return:不同整数的整型数组 */ public static Integer[] getRandomArray(final int MIN, final int MAX, final int SUM) { Integer[] intArray = new Integer[SUM]; for (int counter = 0; counter < 10; counter++) { // 记录已经产生的随机数个数 Integer temp = (int) (Math.random() * (MAX - MIN)) + MIN;// 假设只产生整数,不产生浮点数等其他类型的数 int index = temp % SUM;// 因为没有使用集合,为了提高匹配效率,仿真哈希算法,简单的产生下标 while (intArray[index] != null) { if (intArray[index] == temp) break;// 值相同时也复制到那个堆内存,相当于什么都没做 index = (index + 1) % SUM; } intArray[index] = temp; } return intArray; } }