【问题标题】:Create Random Int Array giving a lenght and a range of values in JAVA在 JAVA 中创建给出长度和值范围的随机 Int 数组
【发布时间】:2021-03-03 15:34:47
【问题描述】:

我正在尝试编写一个 Java 代码,其中给定一个 int 数组的长度以及一个最小值和最大值,它返回一个随机数组值。

我正在尝试以最简单的方式对其进行编程,但我仍然不了解编程过程是如何工作的。

我尝试过的如下:

import java.util.Random;
public class RandomIntArray {
    public static void main(String[] args){

        System.out.println(createRandom(10));
    }
    public static int[] createRandom(int n) {
        Random rd = new Random();
        int[] array = new int[n];
        int min = 5;
        int max = 99;

        for (int i = 0; i < array.length; i++) {
            array[i] = rd.nextInt();
            while (array[i] > min) ;
            while (array[i] < max) ;

        }
        return array;
    }

}

【问题讨论】:

  • 你提供的代码有什么问题?
  • 它不会返回一个随机数组,我介绍的长度是给定最小值和最大值
  • 它做了什么而不是预期的行为?
  • 代码运行时间过长。我不知道为什么

标签: java arrays random integer


【解决方案1】:
public static int[] createRandom(int n) {
    Random rd = new Random();
    int[] array = new int[n];
    int min = 5;
    int max = 10;

    for (int i = 0; i < array.length; i++) {
        array[i] = rd.nextInt(max-min+1) + min;
        System.out.print(array[i] +" ");
    }
    return array;
}

public static void main(String[] args){
    createRandom(5);
}

【讨论】:

  • 非常感谢您的帮助!我对您的代码有疑问:这个位是什么意思:array[i] = rd.nextInt(max-min+1) + min;?
  • 如果你的最小值是 5,最大值是 10,那么 (max - min + 1) + min 给你 11,意味着 rd.nextInt(11) 给你数字 0 ≤ number
【解决方案2】:

尝试使用IntStream 来实现你想要的

public static void main(String[] args) {
    int[] arr = createRandom(10);
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
}

public static int[] createRandom(int n) {
    Random r = new Random();
    int min = 5;
    int max = 99;
    return IntStream
            .generate(() -> r.nextInt(max - min) + min)
            .limit(n)
            .toArray();
}

【讨论】:

    【解决方案3】:

    我们必须调整的第一件事是随机数生成。您似乎指定了minmax,因此必须在这些范围内生成一个数字。我们可以使用Random.nextInt(int bound) method 来设置等于max - min 的范围。但是,此范围将从 0 开始,因此我们必须添加您的 min 值才能使绑定完成。使用此过程将消除对现有while 循环的需要。 See this question for more on this.

    现在,array 中的每个值都将生成为

    array[i] = rd.nextInt(max - min) + min
    

    当尝试打印数组元素时,带有数组变量名的 System.out.println() 语句将打印数组的内存地址这不会打印整个值数组。

    我们必须对元素进行迭代以打印它们。最好使用 for 循环来执行此操作,但您的程序可以生成任意大小的数组。因此,我们应该使用 for-each 循环,如下所示:

    for (int num : createRandom(10)) { 
       System.out.println(num); 
    }
    

    这个 for-each 表示“对于 createRandom(10) 返回的 array 中的每个 int,将其引用为变量 num 并打印它。”

    这是最终代码:

    import java.util.Random;
    public class RandomIntArray {
       public static void main(String[] args){
          for (int num : createRandom(10)) { 
             System.out.println(num); 
          }
       }
       public static int[] createRandom(int n) {
          Random rd = new Random();
          int[] array = new int[n];
          int min = 5;
          int max = 99;
    
          for (int i = 0; i < array.length; i++) {
             array[i] = rd.nextInt(max - min) + min;
             System.out.println(array[i]);
          }
          return array;
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 2015-08-25
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 2011-07-20
      相关资源
      最近更新 更多