【问题标题】:how to create random int array in java with a number in the range 1-50? [duplicate]如何在java中创建一个1-50范围内的随机整数数组? [复制]
【发布时间】:2020-06-20 13:48:53
【问题描述】:

我是 java 新手,我有一个关于如何创建一个随机数组方法的问题,该方法的数字在 1-50 范围内

我需要给他数组的大小,他应该按照我给他的大小和这个数组的元素从 1 到 50 创建一个数组

我尝试了这段代码,但它从不适合我

public class NewClass {
     public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    System.out.print("Enter the number ");
    int r = input.nextInt();
    int[] list = new int[r];
    for (int i=0; i<10; i++){
        int n = (int)(Math.random()*50 + 1);
        list[i] = n;

        System.out.println(list[i] + " ");
    }

 }

【问题讨论】:

标签: java arrays random


【解决方案1】:

你的 for 循环应该是
for (int i = 0; i &lt; r; i++)

【讨论】:

    【解决方案2】:

    这是我肯定会使用流的地方。它们从 Java 8 开始就已经存在,每个人都应该熟悉它们。即使是那些刚接触 Java 编码的人。

            Random r = new Random();
            int nElements = 10;
            int maxElement = 50;
            List<Integer> nums = r.ints(nElements, 1, maxElement+1).boxed().sorted()
                .collect(Collectors.toList()); 
    
            System.out.println(nums);
    

    这里是解释。

    • r.ints 的第一个元素是数量。接下来的两个是startending 范围。由于该范围是独占的,因此必须添加 1 才能将 maxElement 包括在内。
    • Boxed() 将整数映射到要收集到列表中的整数对象。
    • Sorted() 符合您的预期。
    • 收集器将它们放入List

    【讨论】:

      【解决方案3】:

      您应该创建方法以模块化的方式进行。您可以做的其他改进是使用Random::nextInt 摆脱乘法和强制转换。下面给出一个示例程序:

      import java.util.Random;
      import java.util.Scanner;
      
      public class Main {
          public static void main(String[] args) {
              Scanner input = new Scanner(System.in);
              System.out.print("Enter the size of the array: ");
              int r = input.nextInt();
              int[] list = new int[r];
              init(list);
              print(list);
          }
      
          static void init(int list[]) {
              Random random = new Random();
              for (int i = 0; i < list.length; i++) {
                  list[i] = random.nextInt(50) + 1;
              }
          }
      
          static void print(int list[]) {
              for (int i : list) {
                  System.out.print(i + " ");
              }
          }
      }
      

      示例运行:

      Enter the size of the array: 3
      4 1 38 
      

      [更新]发布以下代码来回答 OP 的要求(在下面的评论中提到)也对元素进行排序:

      import java.util.Arrays;
      import java.util.Random;
      import java.util.Scanner;
      
      public class Main {
          public static void main(String[] args) {
              Scanner input = new Scanner(System.in);
              System.out.print("Enter the size of the array: ");
              int r = input.nextInt();
              int[] list = new int[r];
              init(list);
              System.out.println("Original list:");
              print(list);
              System.out.println("\nSorted list:");
              Arrays.sort(list);
              print(list);
      
          }
      
          static void init(int list[]) {
              Random random = new Random();
              for (int i = 0; i < list.length; i++) {
                  int n = (int) (Math.random() * 50 + 1);
                  list[i] = random.nextInt(50) + 1;
              }
          }
      
          static void print(int list[]) {
              for (int i : list) {
                  System.out.print(i + " ");
              }
          }
      }
      

      示例运行:

      Enter the size of the array: 3
      Original list:
      27 5 37 
      Sorted list:
      5 27 37 
      

      【讨论】:

      • 这很好,请告诉我如何排序?
      • 你的意思是对数组的元素进行排序吗?我已经发布了此要求的更新。
      【解决方案4】:

      所以我在您的代码中发现了两个问题:

      1. 您没有关闭课程。因此,只需在您的代码后面加上 }
      2. 如果您想填充整个 Array 而不仅仅是前 10 个元素,请将您的 for 循环条件更改为 i&lt;list.length(如果您的 Array 长度小于 10,您还会收到 IndexOutOfBoundsException)

      希望能帮到你;)

      【讨论】:

        【解决方案5】:

        试试这个:

        Random rand = new Random();
        int my_num = 1 + rand.nextInt(50);
        

        【讨论】:

        • 这比原始海报代码中的(int)(Math.random()*50 + 1); 有什么好处?你的答案在哪里有文字解释?
        • 我把它放在哪里了?
        • 嗨 Xalva,结构良好的答案会在堆栈溢出时吸引赞成票,结构良好的手段可以清楚地解释您的解决方案如何回答问题,您可以使用文字、代码并在可能的情况下显示您的输出问题上下文中的代码。此外,一旦您确定了在 Stack Overflow 上搜索的问题,以查看问题是否已解决,然后只需链接到现有解决方案,这始终是一个好主意。更多帮助在这里stackoverflow.com/help/how-to-answer
        猜你喜欢
        • 1970-01-01
        • 2016-01-23
        • 2016-07-24
        • 1970-01-01
        • 1970-01-01
        • 2017-11-06
        • 2019-05-02
        • 1970-01-01
        • 2013-02-18
        相关资源
        最近更新 更多