【问题标题】:How to create a array with "n" random integers?如何创建一个包含“n”个随机整数的数组?
【发布时间】:2015-05-12 07:24:43
【问题描述】:

创建两个IntegerArrayLists,每个包含n个元素,其中n个将取自用户。

所以基本上如果用户输入“6”,则需要创建两个包含 6 个元素的数组。 我该怎么做?

这就是我所拥有的......但它甚至不是完全正确的。

Scanner input= new Scanner(System.in);
    System.out.println("please enter a integer 'n' ");
    int x= input.nextInt();

    int[] a = { 1, 4, 9, 16 };
    int[] b = { 9, 7, 4, 9, 11 };

【问题讨论】:

  • 首先,您正在创建数组。这些与 ArrayLists 不同。所以你应该阅读 ArrayLists。接下来,您应该阅读 Java 中的随机数。接下来,您应该阅读循环。
  • 我会添加一些关于这些数组需要在其中包含什么的说明。

标签: java arrays random arraylist integer


【解决方案1】:

如果你想从一个区间生成随机整数数组,这里是选项

// generate 100 random number between 0 to 100 
int[]  randomIntsArray = IntStream.generate(() -> new Random().nextInt(100)).limit(100).toArray();
//generate 100 random number between 100 to 200
int[]  randomIntsArray = IntStream.generate(() -> new Random().nextInt(100) + 100).limit(100).toArray();

【讨论】:

【解决方案2】:

您可以使用这样的扫描仪从用户那里获取输入 -

Scanner input= new Scanner(System.in);
System.out.println("Enter the array size: ");
int n = input.nextInt(); 

现在像这样创建一个函数generateRandomArray(int n) -

public List<Integer> generateRandomArray(int n){
    ArrayList<Integer> list = new ArrayList<Integer>(n);
    Random random = new Random();
    
    for (int i = 0; i < n; i++)
    {
        list.add(random.nextInt(1000));
    }
   return list;
}  

这里 - random.nextInt(1000) 将生成一个介于 0 到 1000 之间的随机数。您可以根据需要修复该范围。

现在您可以使用值n从用户那里调用函数-

ArrayList<Integer> list1 = generateRandomArray(n);
ArrayList<Integer> list2 = generateRandomArray(n);

希望它会有所帮助。

【讨论】:

    【解决方案3】:

    为了完整起见, 你可以

    1. 从随机数的下一个 int 生成一个 int 流 发电机作为供应商()-&gt;r.nextInt()
    2. 将流限制为您想要的大小
    3. 将其转换为数组

      int[] randomIntsArray=IntStream.generate(r::nextInt).limit(size).toArray()

    【讨论】:

    • 还可以查看Random#ints() 及其重载(均在 Java 8 中添加)。
    【解决方案4】:
    Scanner input= new Scanner(System.in);
    System.out.println("please enter a integer 'n' ");
    int x= input.nextInt();
    
    int[] a = new int[x];
    int[] b = new int[x];
    

    这基本上是整数数组而不是数组列表

    对于数组列表,您需要使用它来创建它

     List<Integer> integerList=new ArrayList<Integer>();
    

    【讨论】:

      【解决方案5】:

      您可以使用 ThreadLocalRandom

      int[] a = IntStream.range(0, n).map(i -> ThreadLocalRandom.current().nextInt()).toArray();
      

      【讨论】:

        【解决方案6】:
            int x = input.nextInt();
        
            int[] a = new int[x];
            int[] b = new int[x];
        

        然后您可以根据需要填充值

        【讨论】:

        • @lacraig2 他不清楚自己想要什么,在他的代码中他有数组并说他需要数组。
        【解决方案7】:

        首先创建整数数组列表。然后,您可以添加任意数量的整数。

        ArrayList<Integer> ar = new ArrayList<Integer>();
        ar.add(1);
        

        【讨论】:

          【解决方案8】:

          我不会重复其他人所说的,因为它已经足够了,但也许了解 ArrayLists 和 Arrays 之间的区别会对您有所帮助。

          ArrayList Documentation

          Array Documentation

          ArrayLists 动态增长,而 Arrays 具有固定大小。您可以按照其他人提供的出色答案找到如何填充它们。

          【讨论】:

            【解决方案9】:

            自 1.8 起

            // Since, as per your question, you're using arrays even though
            // you state you want ArrayLists, we will assume you know why you're
            // doing so.
            int[] a = new int[x];
            int[] b = new int[x];
            Random random = new Random();
            IntUnaryOperator unaryOpInt = (p) -> random.nextInt(maxIntVal);
            // populate array a with random numbers
            Arrays.setAll(a, unaryOpInt); 
            // populate array b with random numbers
            Arrays.setAll(b, unaryOpInt); 
            // Since, as per your question, you require ArrayLists, you can
            // create ArrayLists from arrays a and b as follows.
            // create an ArrayList from array a
            ArrayList<Integer> aArrList = new ArrayList<>(IntStream.of(a).boxed().collect(Collectors.toList()));
            // create an ArrayList from array b
            ArrayList<Integer> bArrList = new ArrayList<>(IntStream.of(b).boxed().collect(Collectors.toList()));
            

            话虽如此,我只是保持简单,并使用循环初始化为随机值,如果我需要 ArrayLists 或反之亦然,我会尽量避免使用数组。

            【讨论】:

              【解决方案10】:

              您可以使用MockNeat(免责声明我是作者):

              MockNeat mockNeat = MockNeat.threadLocal();
              MockUnitInt intUnit = mockNeat.ints().range(0, 100);
              
              int[] arr1 = intUnit.arrayPrimitive(100).val();
              Integer[] arr2 = intUnit.array(100).val();
              List<Integer> list1 = intUnit.list(100).val();
              List<List<Integer>> list2 = intUnit.list(100).list(100).val();
              

              该库可以很容易地描述生成任意数据的行为,然后重用这个“行为”并用它生成各种结构。

              【讨论】:

                猜你喜欢
                • 2023-04-11
                • 2011-08-06
                • 1970-01-01
                • 2022-01-09
                • 1970-01-01
                • 2015-12-24
                • 2013-01-03
                • 2016-09-23
                相关资源
                最近更新 更多