在 JAVA 中创建给出长度和值范围的随机 Int 数组

Posted

技术标签:

【中文标题】在 JAVA 中创建给出长度和值范围的随机 Int 数组【英文标题】:Create Random Int Array giving a lenght and a range of values in JAVA 【发布时间】: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;
    

【问题讨论】:

你提供的代码有什么问题? 它不会返回一个随机数组,我介绍的长度是给定最小值和最大值 它做了什么而不是预期的行为? 代码运行时间过长。我不知道为什么 【参考方案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;
   

【讨论】:

以上是关于在 JAVA 中创建给出长度和值范围的随机 Int 数组的主要内容,如果未能解决你的问题,请参考以下文章

java中创建String数组的问题

java 如何创建一个类或方法能够给出指定位数的一个随机“大数”?

java怎么在几个指定数字里面产生随机数

java中创建数组时怎么分配内存?

如何在 Java 中创建安全的随机 AES 密钥?

如何在 C++ 中创建随机字母数字字符串?