当前位置: 首页 > 知识库问答 >
问题:

使用Random Class填充数组,然后打印其值

习高格
2023-03-14

我对Java编程比较陌生。

我有一个任务,我必须用0到100的随机数填充一个数组。但是,用户需要能够定义插入该数组中的随机数。为此,我现在创建了变量'n'。

我想我已经搞定了大部分密码。我想尝试使用随机类来创建随机数,而不是数学。随机*100。

我有个错误:

异常在线程"main"java.lang.ArrayIndexOutOfBoundsExc0019:10在CreateArray.main(CreateArray.java:11)

这是我的代码:

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

public class CreateArray{
    public static void main(String [] args){ 
        int n = 10;
        Random myrandom = new Random(); 
        int[] engine = new int[n]; // Initialising my array and giving it the name engine, I'm also passing value 'n' to my array length
        engine[n] = myrandom.nextInt(100-0); //This exclues 100 and 0, to include those I would say +100 or +0

        for(int i=0; i < engine.length; i++){ //Using a for loop to cycle through my array and print out its elements
            System.out.println(engine[i]); //Printing out my array 
        }
    }
}

共有2个答案

孙京
2023-03-14
engine[n] = myrandom.nextInt(100-0); 

这应该是这样的:

engine[n-1] = myrandom.nextInt(99)+1; // To exclude 0 and 100.

Java数组的范围是0n-1。数组的最后一个元素是n-1而不是n。您正在访问n索引,该索引甚至不在范围内。

用于将元素添加到数组中。如果使用循环添加它们,那么您不需要单独添加最后一个元素的值。它将在循环中得到照顾。

for(int i=0; i < engine.length; i++) { 
    engine[i] = myrandom.nextInt(99)+1; // To exclude 0 and 100.
}
白腾
2023-03-14

至于您的错误,数组的大小是n,因此数组中的索引将从0n-1。您在文章中显示的代码试图将一个随机变量放在索引中,超过不存在的数组的末尾(它是数组的边界,因此ArrayIndexOutOfBoundsExc0019)。当n=10时,您的数组将具有索引09,并且您正在尝试将值置于index10

相反,您希望使用随机整数初始化数组中的每个索引,因此您将希望循环遍历数组,就像打印数组一样,并为每个索引创建一个新的随机变量。

要生成随机数,如果使用Java 1.7或更高版本,可以使用ThreadLocalRandom。看看这个对一个类似问题的伟大回答,了解在Java中生成随机数的“正确”方法(无论您是否使用Java 1.7)。

如果使用Java

public static int randInt(int min, int max) {
    //you can initialize your Random in a number of different ways. This is just one.
    Random rand = new Random();

    int randomNum = rand.nextInt((max - min) + 1) + min;

    return randomNum;
}

注意,在你的代码中,你提到了myrandom。nextInt(100-0)将为您提供介于0和100之间的数字,不包括0和100。这并不完全正确。这将给出0到99之间的数字,包括0到99。

既然你知道你只想要1到99之间的数字,你可以把它们插入上面的方法来得到这个。

public static int randInt() {
    Random rand = new Random();
    return rand.nextInt(99) + 1;
}

由于这基本上是一个单行程序,它实际上不需要自己的方法,所以您可以生成随机数,并将其存储在引擎数组中,而不需要使用这种方法,就像这样。

Random myrandom = new Random();
for (int i=0; i < engine.length; i++) {
    engine[i] = myrandom.nextInt(99) + 1;
}

最后,使用Java1.7,您可以使用ThreadLocalRandom,您可以在不初始化Random实例的情况下使用它。以下是使用它的样子。

for (int i=0; i < engine.length; i++) {
    engine[i] = ThreadLocalRandom.current().nextInt(1, 100);
}
 类似资料:
  • 我必须用奇数的范围(这里是)填充数组:1,3,5,7,9...但我总是在每个奇数之间有一个0,我不明白为什么。 注:注释中大写字母下的代码是由我们的教授给出的... 输出:

  • 问题内容: 我是Java 8的新手,目前无法完全掌握Streams,是否可以使用Stream功能操作填充数组?这是我如何使用标准的for循环来实现的示例代码: 如果有可能,我将如何使用Stream?如果可能,是否方便(性能和可读性明智)? 问题答案: 在这里,您有一个解决方案,它生成数组而不是修改先前定义的变量: 如果要使用并行流,那么避免诸如修改变量(数组或对象)之类的副作用非常重要。这可能会导

  • 问题内容: 我是Android的新手,我想尝试做一些非常基础的事情:Array中有5个字符串(例如’One’,’Two’…)。我想将这5个字符串添加到listactivity的列表视图中。 我的清单: 我的清单行: 基本上,我想将Array项绑定到TextView homeItemName。稍后我可能会在行中添加其他项,因此不能将listview绑定到条目。 谢谢! 问题答案: 对于代码,请快速浏

  • 我对Javafx不熟悉,想知道如何从2维字符串数组填充桌面视图: 会非常感激你的回应。

  • Arrays 类提供了一个 fill() 方法,可以在指定位置进行数值填充。fill() 方法虽然可以填充数组,但是它的功能有限制, 只能使用同一个数值进行填充。语法如下: 其中,array 表示数组,value 表示填充的值。 例 1 声明一个 int 类型的 number 数组,然后通过 for 语句进行遍历,在该语句中调用 Arrays 类的 fill() 方法来填充数组,并输出数组中元素的

  • 试图找到用从23开始的一些值按降序填充数组的最简单方法。我有下面的代码,但没有得到我正在寻找的结果: 现在输出 预料之中 如果可能的话,没有for/while循环,如何轻松填充数组并获得预期的输出?