从1-30创建20个不同的数字,不重复

时间:2016-03-01 21:29:17

标签: java arrays

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]。但就像我说我的输出都是零。

1 个答案:

答案 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]