【问题标题】:Java trying to fill int array with unique numbersJava试图用唯一的数字填充int数组
【发布时间】:2018-03-08 05:21:18
【问题描述】:

我是这个网站的新手,我的英语很差,请原谅我。

我的功能有问题:

public void generate(int[] array) {
    int i=0;
    boolean isvalid=true;
    while (i < 5) {
        int rng = (int)(Math.random()%100*100);
        for (int j=0; j < 5; j++) {
            if (array[j] == rng) {
                isvalid=false;
                System.out.println("duplicate: "+rng);
            }
        }
        if (isvalid) {
            array[i]=rng;
            System.out.println(rng);
            i++;
        }
    }
}

我需要用 0 到 100 之间的唯一随机数填充一个 5 大小的 int 数组。这是可行的,但有时会出错,并开始无限循环,并且由于某种原因我的编译器(netbeans)无法生成新的随机数号码,只是循环一些。 例如:

duplicate 62
duplicate 62
duplicate 64
duplicate 97
duplicate 97
duplicate 64
duplicate 97
duplicate 62
duplicate 64
duplicate 62
duplicate 64
duplicate 62
duplicate 97
duplicate 97
duplicate 56
duplicate 97
duplicate 62
duplicate 56
duplicate 56
duplicate 56
duplicate 64
duplicate 56
duplicate 62
duplicate 56

有人对我的问题有任何有用的提示吗? 提前致谢!

【问题讨论】:

    标签: java arrays int unique infinite-loop


    【解决方案1】:

    一旦isvalid = false; 它永远不会再次true,因此你会得到一个无限循环,因为在这种情况下你不会增加i(快速修复应该是isvalid = true 内的while)。

    【讨论】:

    • 天啊...至少我累了...谢谢!
    【解决方案2】:

    我建议您使用另一种方法来生成这些数字。

    首先您创建一个List,其中包含从1100 的所有数字。然后你只需从list 中选择随机数并将它们放入你的数组中

    List<Integer> list = IntStream.rangeClosed(0, 100)
                 .boxed().collect(Collectors.toList());
    
    int[] randomArray = new int[100];
    Random random = new Random();
    
    for(int i = 0; i < 100; i++) {
        Integer randomIndex = random.nextInt(list.size());
        randomArray[i] = list.get(randomIndex);
        list.remove(randomIndex);
    }
    

    这样你就可以保证在一次迭代中你将获得所需的数组,而没有无用的随机调用。

    【讨论】:

      【解决方案3】:

      使用 Java 8 为您提供的功能:使用 0 到 100 之间的无限随机整数流,然后是不同的,然后限制为 5。由于这是家庭作业,我认为您应该付出一些努力,所以我不会发布这几行必填。

      【讨论】:

        【解决方案4】:
        private List getRandomNumberList(){
            List<Integer> alist = new ArrayList<>();
            while (alist.size() < 5){
                // for numbers from 0 to 100 use factor 101
                int number = (int) (Math.random() * 101);
                if (!alist.contains(number)){
                    alist.add(number);
                }
            }
            return alist;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多