目的是:从1-33个数里面随机抽取5个不同的值,并显示出来。
问题是:下面的code已经实现了随机抽取5个值,但是并没有过滤相同的值。我要怎么判断才能实现抽取不同的值出来?大脑适中%……
public class welcome 
{
public static void main(String[] args)
{
int n = 33;
int[] oriNumber = new int[n];
for(int i=0; i<oriNumber.length; i++)
{
oriNumber[i] = i + 1;
}

int k = 5;
int[] resultNumber = new int[k];
for(int i=0; i<resultNumber.length; i++)
{
int randNumber = (int)((Math.random()*oriNumber.length)+1);
resultNumber[i] = randNumber;
System.out.print(resultNumber[i] + "  ");
}
}
}

解决方案 »

  1.   

    支持1楼的,将取到的值放到Set里进行过滤!
      

  2.   

    public class randomTest { public static void main(String[] args) {
    int random[]=new int[5];
    for(int i=0;i<random.length;i++){
    random[i]=(int)(Math.random()*33);
    for(int j=0;j<i;j++){
    if(random[j]==random[i]){
    i--;
    break;
    }
    }
    }
    for(int i=0;i<random.length;i++){
    System.out.print(random[i]+" ");
    } }
    }
      

  3.   

    楼上的效率很低,for里面taofor循环还是放到set中好
      

  4.   

    /**
     * @param args
     */
    public static void main(String[] args) { String select[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
    "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
    "21", "22", "23", "24", "25", "26", "27", "28", "29", "30",
    "31", "32", "33" }; String[] select5 = new String[5]; for (int i = 0; i < select5.length; i++) { int val = (int) (Math.random() * 33); select5[i] = select[val]; for (int j = 0; j < i; j++) { if (select5[j] == select[val]) { i--;
    break;
    }
    }
    } for (int i = 0; i < select5.length; i++) { System.out.println("Random" + (i + 1) + ":" + select5[i]);
    }
    }
      

  5.   


    /**
     * 生成【being, end}之间不重复的随机数
     * 
     * @param begin
     *            开始值
     * @param end
     *            结束值
     * @param count
     *            个数
     * 
     * @return int[]
     */
    public static int[] noRepRandoms(int begin, int end, int count) {
        int[] tmpArray = new int[end - begin];    for (int i = 0; i < tmpArray.length; i++, begin++)
            tmpArray[i] = begin;    int[] results = new int[count];    Random rd = new Random();    int tmpIndex = 0, len = tmpArray.length;    for (int i = results.length - 1; i >= 0; i--) {
            tmpIndex = Math.abs(rd.nextInt() % len);
            len--;
            results[i] = tmpArray[tmpIndex];
            tmpArray[tmpIndex] = tmpArray[len];
        }    return results;
    }
      

  6.   

    用list好。
    .....
    List arr = new ArrayList();
    if(!arr.contains()){          //如果不包含则放入list中
    arr.add();
    }
      

  7.   

    初学者,不知上面说的是否是这个意思呢?才看到这个地方,有什么不对的地方,希望大家指正,谢谢!import java.util.*;
    public class welcome 
    {
        public static void main(String[] args)
        {
            int n = 33;
            int[] oriNumber = new int[n];
            for(int i=0; i<oriNumber.length; i++)
            {
                oriNumber[i] = i + 1;
            }
            
            int k = 5;
            int[] resultNumber = new int[k];
            Set s = new HashSet() ;
            for(int i=0; i<resultNumber.length; i++)
            {
                s.add((int)((Math.random()*oriNumber.length)+1));
            }
            Iterator it = s.iterator() ;
            while(it.hasNext())
            {
                System.out.print(it.next()+" ") ;
            }
        }
    }
      

  8.   

    public static void main(String[] args) {
    Map map=new HashMap();
    while(map.size()<5){
    int num=new Double(Math.random()*10).intValue();
    map.put(num, num);
    }
    }
    这样取出来的数据就是不重复的!
      

  9.   

    楼上那位的也可以
    public static void main(String[] args) {
    List list =new ArrayList();
    while(list.size()<5){
    int num=new Double(Math.random()*10).intValue();
    if(!list.contains(num)){
    list.add(num);
    }
    }
    System.out.println(list);
    }
    无论放在list还是map都可以