如何创建一个包含“n”个随机整数的数组?

12
创建两个 Integer ArrayLists,每个列表包含 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 };

5
首先,你正在创建数组。这与ArrayList不同。因此,你应该了解一下ArrayList。接下来,你应该了解Java中的随机数。然后,你应该了解循环。 - Jon Skeet
1
可能是Filling my arrays with random numbers?的重复问题。 - Adrian Leonhard
我会添加一些澄清,以便说明这些数组需要包含什么。 - sparkyShorts
10个回答

27

如果您想从给定的区间生成随机整数数组,这里有几个选项:

// 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();

3
使用流(streams)创建一个来自区间的随机整数数组,更好的选择是例如int[] array = new Random().ints(100, 0, 100).toArray()。这样可以避免为每个随机数创建新的Random实例,并且在我看来更清晰明了。 - Slaw
1
准确来说,你的代码生成了100个0到99之间的随机数和100到199之间的随机数。从Oracle文档中可以看到,该方法返回一个伪随机、均匀分布的int值,该值介于0(包括)和指定值(不包括)之间。 - Kfir Ettinger

9
您可以通过使用类似这样的扫描仪从用户那里获取输入 -
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);

希望这能有所帮助。


6

为了完整性,自以来您可以:

  1. 使用随机数生成器的下一个int作为Supplier()->r.nextInt(),生成一个int流
  2. 将流限制为所需大小
  3. 将其转换为数组

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


1
还要查看Random#ints()及其重载(均在Java 8中添加)。 - Slaw

1
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>();

1
您可以使用ThreadLocalRandom
int[] a = IntStream.range(0, n).map(i -> ThreadLocalRandom.current().nextInt()).toArray();

0

自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或者相反的情况下避免使用数组。

0
    int x = input.nextInt();

    int[] a = new int[x];
    int[] b = new int[x];

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


1
@lacraig2 他不太清楚他想要什么,在他的代码中,他有数组并说他需要数组。 - sparkyShorts

0

首先创建一个整数ArrayList。然后您可以添加任意数量的整数。

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

0

你可以使用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();

该库使得描述生成任意数据的行为变得容易,并且可以重复使用这个“行为”,并用它来生成各种结构。


0

我不会重复别人已经说过的话,因为这已经足够了,但是了解ArrayList和Arrays之间的区别可能会对你有益。

ArrayList文档

Array文档

ArrayLists可以动态增长,而Arrays具有固定大小。你可以通过遵循其他人提供的出色答案来找到如何填充它们的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接