我的目标是询问用户数组长度并生成随机双打列表以填充该数组。我不明白如何将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);
}
}
答案 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)
您可以将 ThreadLocalRandom
与 Random#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循环,其概念与第一个循环相同。