Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 随机整数数组_Java_Arrays_Random - Fatal编程技术网

Java 随机整数数组

Java 随机整数数组,java,arrays,random,Java,Arrays,Random,我需要一个数组来生成10个介于1和5之间的随机数, 包含全部费用然后我需要显示1-5在数组中出现的次数。这就是我到目前为止得到的结果,它运行良好,只是数字1-5每次出现的次数总和不同,每次总共应该正好是10,因为数组只能容纳10个整数 public static void main(String[] args){ //create an array that will produce 10 numbers int[] randArray = new int[10]; /

我需要一个数组来生成10个介于1和5之间的随机数, 包含全部费用然后我需要显示1-5在数组中出现的次数。这就是我到目前为止得到的结果,它运行良好,只是数字1-5每次出现的次数总和不同,每次总共应该正好是10,因为数组只能容纳10个整数

public static void main(String[] args){
    //create an array that will produce 10 numbers
    int[] randArray = new int[10];

    //initialize randArray to the values 1-5
    for(int i = 0; i < 6; i++){
        randArray[i] = (int)(Math.random() * (6 - 1)) + 1;
    }

    System.out.println("Number\t" + "Appears");

    for(int x = 1; x < 6; x++){
        System.out.println(x + "\t" + randArray[x]);
    }
}
publicstaticvoidmain(字符串[]args){
//创建一个将生成10个数字的数组
int[]随机数组=新int[10];
//将randArray初始化为值1-5
对于(int i=0;i<6;i++){
随机数组[i]=(int)(Math.random()*(6-1))+1;
}
System.out.println(“出现数字\t”+”);
对于(int x=1;x<6;x++){
System.out.println(x+“\t”+randary[x]);
}
}
随机范围数组大小的混淆限制 您的
for
循环只寻址数组中的前六个插槽,而不是全部十个,索引#0到#5=6个插槽,而不是10个

使用命名变量 您可能混淆了随机数生成器的限制和数组大小的限制。这是一个很好的例子,说明了为什么应该使用命名良好的变量,而不是

ThreadLocalRandom
通常,使用该类比使用其他类更好、更简单

这个类使用半开放的方法来定义一个范围,其中开始是包含的,而结束是独占的。如果希望结果仅包括1、2、3、4和5,请指定范围1-6

int randomRangeHalfOpen_Origin = 1 ; // We want results generated in range of 1-5 in fully-closed range, which is 1-6 in half-open range, ending is exclusive). 
int randomRangeHalfOpen_Bound = 6 ;  // The limit is *exclusive* (never appearing in generated results). This is known as "Half-Open" approach to defining a range. This is often the wisest approach in defining ranges.
… 
randArray[ arrayIndex ] = 
    ThreadLocalRandom.current().nextInt( 
        randomRangeHalfOpen_Origin , 
        randomRangeHalfOpen_Bound 
    ) 
;  // Returns a pseudorandom int value between zero (inclusive) and the specified bound (exclusive).
计数事件 至于计算生成的随机数中出现的次数,我将留给作者完成他们自己的家庭作业。如果你费心搜索的话,已经多次涉及堆栈溢出。

循环:

for (int i = 0; i < 6; i++){
    randArray[i] = (int)(Math.random() * (6 - 1)) + 1;
}
最后一点注意:在不强制转换的情况下生成介于1和5之间的随机整数的更好方法是:

Random r= new Random();
for (int i=0; i<10; i++){
    randArray[i] = 1 + r.nextInt(5); // 5 is exclusive, the nearest lower possible int is 4
}
Random r=new Random();

对于(int i=0;i您的代码中有两个问题:

首先

我需要生成10个介于1和5之间的随机数的数组

在这种情况下,必须循环到10,这是数组长度,而不是:

for (int i = 0; i < 6; i++) {

你为什么只填充6个随机数?你是在打印数组值本身,而不是计数。你实际上没有在代码中的任何地方进行计数。好吧,这些都没有帮助,也许我需要解释更多。我需要一个包含10个整数的数组,每个插槽只能包含数字1、2、3、4和5,它们需要填充数组随机生成的数字可能是:5,4,3,3,1,4,5,3,1,1。然后我需要显示只能放入数组的数字,1-5,并显示每个数字在数组中出现的次数,如下所示:数字1出现3次,数字2出现0次,数字3出现3次,数字4出现2次,数字5出现2次。每次出现*的总数应等于10。
Random r= new Random();
for (int i=0; i<10; i++){
    randArray[i] = 1 + r.nextInt(5); // 5 is exclusive, the nearest lower possible int is 4
}
for (int i = 0; i < 6; i++) {
for (int i = 0; i < randArray.length; i++) {
                    ^^^^^^^^^^^^^^^^
Map<Integer, Long> appearence = Arrays.stream(randArray).boxed()
                .collect(Collectors.groupingBy(n -> n, Collectors.counting()));
System.out.println("Number\t" + "Appears");
appearence.forEach((k, v) -> System.out.println(k + "\t\t" + v));

Number  Appears
1       2
2       2
3       4
4       2