用随机数填充一个数组

15

我需要用构造函数创建一个数组,添加一个方法以序列的形式打印出来,并添加一个方法以随机双精度类型的数字填充该数组。

这是目前我所做的:

import java.util.Random;

public class NumberList {
    private static double[] anArray;

    public static double[] list() {
        return new double[10];
    }
    
    public static void print(){
        System.out.println(String.join(" ", anArray);
    }

    public static double randomFill() {
        return (new Random()).nextInt();
    }
    
    public static void main(String args[]) {
        // TODO
    }
}

我正在努力想出如何用在randomFill方法中生成的随机数来填充数组。谢谢!


1
如果你的数组应该存储double,为什么要生成随机的int - GriffeyDog
你应该使用 nextDouble - Smit
你离成功就差一点了,你现在描述的步骤需要放在 main() 函数中。 - DeltaLima
请先使用谷歌搜索 http://mathbits.com/MathBits/Java/arrays/Initialize.htm - aalku
15个回答

16
您可以在Random类中使用Java 8提供的IntStream ints()或DoubleStreamdoubles()。以下示例代码可供参考,具体取决于您需要的是double还是int等类型。
Random random = new Random();

int[] array = random.ints(100000, 10,100000).toArray();

你可以将该数组打印出来,你会获得100000个随机整数。


9
你需要添加逻辑,使用 randomFill 方法为 double[] 数组分配随机值。
更改:
 public static double[] list(){
    anArray = new double[10];   
    return anArray;
 }

为了

 public static double[] list() {
    anArray = new double[10];
    for(int i=0;i<anArray.length;i++)
    {
        anArray[i] = randomFill();
    }
    return anArray;
}

然后您可以在主方法中调用方法,包括list()和print(),以生成随机的双精度值,并在控制台中打印double[]数组。
 public static void main(String args[]) {

list();
print();
 }

以下是一个结果:

一个结果如下:

-2.89783865E8 
1.605018025E9 
-1.55668528E9 
-1.589135498E9 
-6.33159518E8 
-1.038278095E9 
-4.2632203E8 
1.310182951E9 
1.350639892E9 
6.7543543E7 

3
这似乎有点像作业。所以我会给你一些提示。好消息是你已经接近成功了!你已经完成了大部分的艰苦工作!
  • 考虑一种构造,可以帮助你迭代数组。是否有某种构造(例如循环)可以用来遍历数组中的每个位置?
  • 在这个构造内,对于循环的每次迭代,您将把randomFill()返回的值赋给数组的当前位置。

注意:你的数组是double类型的,但你从randomFill中返回的是int类型的。所以你需要修复一些问题。


3

Arrays#setAll

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        double[] anArray = new double[10];
        Arrays.setAll(anArray, i -> Math.random());
        System.out.println(Arrays.toString(anArray));
    }
}
示例运行的输出:

[0.1182317850027168, 0.9437573020895418, 0.2690505524813662, 0.6771923722130754, 0.04893586074165357, 0.42483010937765653, 0.16310798731469023, 0.2541941051963008, 0.9838342001474454, 0.8595732419005068]

或者,

import java.util.Arrays;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        double[] anArray = new double[10];
        
        anArray = IntStream.range(0, anArray.length)
                    .mapToDouble(i -> Math.random())
                    .toArray();
        
        System.out.println(Arrays.toString(anArray));
    }
}

或者,

import java.util.Arrays;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        double[] anArray = new Random().doubles(10).toArray();
        System.out.println(Arrays.toString(anArray));
    }
}

2

人们没有注意到Java库中有很多好用的Stream生产器。

public static double[] list(){
    return new Random().ints().asDoubleStream().toArray();
}

添加 .limit(0) - Johannes Kuhn

2
你可以通过循环遍历数组,在每次迭代中调用randomFill方法。具体操作如下:
import java.util.Random;

public class NumberList {
    private static double[] anArray;

    public static double[] list() {  
        return new double[10];
    }

    public static void print() {
        System.out.println(String.join(" ", anArray));
    }


    public static double randomFill() {
        return (new Random()).nextInt();
    }

    public static void main(String args[]) {
        list();
        for(int i = 0; i < anArray.length; i++)
            anArray[i] = randomFill();

        print();
    }
}

2

试试这个:

public void double randomFill() {
    Random rand = new Random();
    for (int i = 0; i < this.anArray.length(); i++)
        this.anArray[i] = rand.nextInt();
}

1
可能是在Java 8中最干净的方法:

private int[] randomIntArray() {
   Random rand = new Random();
   return IntStream.range(0, 23).map(i -> rand.nextInt()).toArray();
}

2
不行。new Random().ints().limit(22).toArray();. - Johannes Kuhn

1
你可以在循环中调用randomFill()方法,并像这样在main()方法中填充数组。
public static void main(String args[]) {
    for (int i = 0; i < anArray.length; i++) {
        anArray[i] = randomFill();
    }
}

如果要填充的数组是double数组,您需要在randomFill()方法中使用rand.nextDouble()。以下代码段应该可以帮助您获取要填充到数组中的随机double值。

double randomDoubleValue = rand.nextDouble();
return randomDoubleValue;

1
我尝试在Java中尽可能简单地实现这个。这将生成一个包含100个变量的整数数组,并使用仅三行代码填充它,其中的整数介于0和10之间。您还可以轻松更改随机数的范围!
int RandNumbers[]=new int[100];
for (int i=0;i<RandNumbers.length;i++)
    RandNumbers[i]=ThreadLocalRandom.current().nextInt(0,10);

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