public class randomNumbers {
public static void main(String args[]){
int[] nums = new int[20];
Random rn = new Random();
int temp;
for(int i=0;i!=20;i++) {
temp=rn.nextInt(30)+1;
for(int j=0; j<i; j++) {
if(temp==nums[j]) {
j=0;
temp = rn.nextInt(30)+1;
}
}
temp = nums[i];
}
for(int i=0; i!=20; i++) {
System.out.println(nums[i]);
}
}
这是我的程序代码。但输出全是零。第一个循环应运行20次并从1-30生成随机int,然后嵌套循环应测试并查看它是否在数组中。如果为true,则应创建新的temp并将j设置为0以再次检查。如果没有,则嵌套循环应该完成,temp设置等于nums [i]。但就像我说我的输出都是零。
答案 0 :(得分:1)
使用集合,不要重新发明轮子:
Set<Integer> mySet = new HashSet<Integer>();
Random rnd = new Random();
while (mySet.size() < 20) {
mySet.add(rnd.nextInt(30) + 1);
}
System.out.println(mySet);
这将打印:
[3,4,5,6,9,10,11,12,14,15,17,16,20,23,22,24,27,26,29,30]
@ user3745362建议的另一个选项
List<Integer> myList = new ArrayList<Integer>();
for (int i = 0; i < 30; i++) {
myList.add(i + 1);
}
Collections.shuffle(myList);
System.out.println(myList.subList(0, 19)); //return a sublist from 0 to 19
这将打印:
[15,17,24,29,3,18,22,5,13,8,19,11,10,27,12,26,20,30,16]