题目:实现随机数生成器,要求根据指定的数据范围、和产生随机数个数,生成不重复的随机数。import java.util.Scanner;public class Ex1136 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.println("请输入人数:");
int n=scanner.nextInt();
int b[]=new int[10];
for(int i=0;i<5;i++){
int  a=((int)Math.random()*n+1);
b[i]=a;
for(int j=0;j<i;j++){
if(b[i]==b[j]){
i--;
break;
}
}
}
for(int i=0;i<5;i++){
System.out.println(b[i]);
}
}

}

解决方案 »

  1.   


    for (int j = 0; j < i; j++) {//这里死循环了
    if (b[i] == b[j]) {
    i--;
    break;
    }
    }
      

  2.   


    public class Ex1136 {
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入人数:");
    int n = scanner.nextInt(); int b[] = new int[10];
    for (int i = 0; i < 5; i++) {
    int a = ((int) Math.random() * n + 1);
    b[i] = a;
    for (int j = 0; j < i; j++) {
    if (b[i] == b[j]) {
    i--;//这里死循环了!!!
    break;
    }
    }
    }
    for (int i = 0; i < 5; i++) {
    System.out.println(b[i]);
    } }}
      

  3.   

    ((int)Math.random()*n+1) 这里有问题啊 转换的时候一直是0*n。
     加个括号 ((int)(Math.random()*n)+1)
      

  4.   

    int  a=((int)Math.random()*n+1);
    你这个a永远是1
      

  5.   

    帮你改好了。你犯了好几处错误public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入最大范围:");
    int max = scanner.nextInt();
    System.out.println("请输入个数:");
    int num = scanner.nextInt();

    Set<Integer> set=new HashSet<>();
    while(set.size()<=num){

    double random = Math.random();
    int a = (int) (random * (double)max) + 1;//这里需要用double型进行乘操作
    if(!set.contains(a)){
    set.add(a);
    }
    }
    //输出所有随机生成的数
    for(Integer i:set){
    System.out.println(i);
    }
    }
      

  6.   

    加一个判断而已。。
    做程序总会有很多BUG的,遇到了改就是了。