import java.util.Random;
public class RandomDemo01 {
public static void main(String arg[]){
Random ran = new Random();
int temp = ran.nextInt(7)+1;
int arr[] = new int[7];
for(int i=0;i<7;i++){
for(int j=0;j<i;j++){
if(arr[j] == temp){
temp = ran.nextInt(7)+1;
j = 0;
}
}
arr[i] = temp;
}
for(int i=0;i<7;i++){
System.out.print("   "+arr[i]);
}
}
}程序是想做到7个不一样的数,但是运行的结果会出现重复的:   7   2   4   3   6   1   7,反复查找没找到问题所在,求高手赐教;
下面的程序是一个能运行正确的程序
import java.util.Random;
public class RandomDemo02 {
public static void main(String args[]){
Random ran = new Random();
int arr[] = new int[7];
for(int i=0;i<7;i++){
arr[i] = ran.nextInt(7)+1;
for(int j=0;j<i;j++){
if(arr[i] == arr[j]){
i--;
break;
}
}
}
for(int i=0;i<7;i++){
System.out.print("  "+arr[i]);
}
}
}

解决方案 »

  1.   

    那是因为ran.netInt(7) 是产生随机数的 当然可能重复:
    而正确的程序中增加了如下代码:for(int j=0;j<i;j++){
    if(arr[i] == arr[j]){
    i--;
    break;
    }
    }
    这个就是验证数组中是否有重复的数据,如果已经有了 本次产生的随机数就不再放入数组中了,i--就是这个道理。
      

  2.   

    for(int i=0;i<7;i++){
         for(int j=0;j<i;j++){
            if(arr[j] == temp){
            temp = ran.nextInt(7)+1;
             j = 0;
            }
          }
         arr[i] = temp;
    }
    第一个程序也增加了个判断是否有重复的,就是不知道错误在哪里;
      

  3.   

    Random本来就是有可能产生俩个相同的随机数的,所以需要做个逻辑来判断。下面的程序当判断数组中两个数相同的时候,就会让数组的下标回退以便获得不同的随机数。
      

  4.   

    if(arr[j] == temp){
    temp = ran.nextInt(7)+1;
    j = -1;
    }
    每次j=0之后会j++,所以从1开始判定,永远是和arr[0]重复,j=-1以后再自加才是从0开始
      

  5.   

    不重复的随机数还是用Collection比较直观。
    public static void main(String arg[]) {
    Random ran = new Random();
    int temp;
    List<Integer> list= new ArrayList<Integer>();
    for (int i = 0; i < 7; i++) {
    do {
    temp = ran.nextInt(7) + 1;
    }while(list.contains(temp));
    list.add(temp);
    }
    System.out.print(list);
    }
      

  6.   

    你把
    if(arr[j] == temp){
    temp = ran.nextInt(7)+1;
    j = 0;
    }里面的j=1 改为j=-1试下。
      

  7.   

    在11楼的基础上做了以下修改。public static List getRandomList(int number){
    Random ran = new Random();
    int temp;
    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < number; i++) {
    do {
    temp = ran.nextInt(number) + 1;
    } while (list.contains(temp));
    list.add(temp);
    }
    return list;
    }
      

  8.   

    就是存在set里面就好了,干嘛整这么麻烦。