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

求解这个小程序肿么运行不了
题目:实现随机数生成器,要求根据指定的数据范围、和产生随机数个数,生成不重复的随机数。

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

}

------解决方案--------------------

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

}

}

------解决方案--------------------
((int)Math.random()*n+1) 这里有问题啊 转换的时候一直是0*n。
 加个括号 ((int)(Math.random()*n)+1)
------解决方案--------------------
帮你改好了。你犯了好几处错误

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