日期:2014-05-20  浏览次数:20942 次

产生10个不同的随机数到数组里
产生10个不同的随机数到数组里

------解决方案--------------------
Java code
//一般做法
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));

------解决方案--------------------
Java code

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) );
    }
}

------解决方案--------------------
Java code
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);
    }
}

------解决方案--------------------
Java code



//如果不使用集合,请仿照下面的写法
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;
    }
}