如何在数组中生成随机双精度?

时间:2018-06-18 15:31:57

标签: java arrays random

我的目标是询问用户数组长度并生成随机双打列表以填充该数组。我不明白如何将Math.random放入我的数组中。我开始采用不同的方法并将其废弃。为什么double random = Math.random()* array;不要将随机生成器导入我的数组?

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

public class Average
{
  public static void main(String[] args)
  {
    /*Scanner in = new Scanner (System.in);

    System.out.println("Please enter your array size: ");
    int size = in.nextInt();
    int[] awnser = new int[size]; */
    Scanner scanner = new Scanner(System.in);

    System.out.println("Enter a number");

    double[] array = new double[scanner.nextDdouble()];
    double random = Math.random() * array;
    System.out.println(array.length);

    }
  }

6 个答案:

答案 0 :(得分:4)

使用当前的解决方案,您需要使用从0开始并在给定大小之前结束的计数器进行迭代,为每个数组元素分配nextDouble调用。

Java中不支持将数组对象乘以数字。

这是你可能喜欢的Java-8习语:

DoubleStream
    .generate(ThreadLocalRandom.current()::nextDouble)
    .limit(yourGivenSize)
    .toArray();

这会为您提供double[]大小yourGivenSize,其元素是随机生成的。

答案 1 :(得分:1)

Arrays#setAll

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        double[] array = new double[10];
        Arrays.setAll(array, i -> Math.random());
        System.out.println(Arrays.toString(array));
    }
}

示例运行的输出:

<块引用>

[0.1182317850027168, 0.9437573020895418, 0.2690505524813662, 0.6771923722130754, 0.04893586074165357, 0.42483010937765653, 0.16310798731469023, 0.254194105819, 0.254194105819, 0.2541941058080.780.4080.4080.4080.3780.40595959

或者,

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

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

或者,

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

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

答案 2 :(得分:1)

Java 8+

您可以将 ThreadLocalRandomRandom#doubles 方法一起使用。

import java.util.concurrent.ThreadLocalRandom;
//...
double[] randoms = ThreadLocalRandom.current().doubles(10).toArray();
//Generate 10 random doubles

double[] randoms = ThreadLocalRandom.current().doubles(10, 0, 5).toArray();
//Generate 10 random doubles between 0 (inclusive) and 5 (exclusive)

答案 3 :(得分:0)

  

为什么double random = Math.random()* array;不要将随机生成器导入我的数组?

你误解了这门课的运作方式。 Here很好地解释了这门课的作用。我相信你想要做的事情就是:

    Random rand = new Random();
    Scanner scanner = new Scanner(System.in);

    System.out.println("Enter a number");
    //create an array with the size entered by the user
    double[] array = new double[scanner.nextInt()];
    //populate the array with doubles
    for(int i =0; i < array.length; i++) {
        array[i] = rand.nextDouble();
    }

nextDouble返回0到1.0之间的伪随机数,因此您需要将其乘以上限。 (即如果100是你的上限rand.nextDouble() * 100;

(请务必import Random班级)

答案 4 :(得分:0)

我不完全确定你要做什么,你想要进入阵列的值的范围是多少?在任何情况下,我认为这应该实现你想要做的,我在这里使用命令行参数来提供数组长度,随意将其更改回扫描仪。

int arrayLength = Integer.parseInt(args[0]);

double[] array = new double[arrayLength];
for (int i = 0; i < arrayLength; i++)
    array[i] = Math.random() * arrayLength;
System.out.println(Arrays.toString(array));

生成特定范围的随机值:

Min + (int)(Math.random() * ((Max - Min) + 1))

答案 5 :(得分:0)

我用你原来的想法计算你循环生成随机双数的次数。如您所知,数组索引(或位置)从零开始。所以我用一个for循环从0开始,一旦这个行产生了数字:list [i] = num;将随机数放入数组的第一个索引(位置)并继续,直到达到用户指定的大小。

package stack;

    import java.util.Scanner;
    import java.util.Random;

    public class Stack {

    public static void main(String[] args){

      Scanner input = new Scanner(System.in);
      System.out.println("enter a number");

    int size = input.nextInt();
       Double[] list = new Double[size];

       for(int i = 0; i < size; i++){
            Double num = Math.random();
            list[i] = num;
       }
     System.out.println(list.length);
    }
    }

/*  for(int i = 0; i< list.length; i++){
     System.out.println(list[i]);  }
*/

如果你想检查数组内容,我也包括在内。我通过检查每个索引(位置)并显示它们来创建另一个for循环,其概念与第一个循环相同。