java - 将数组大小设置为来自另一个类的用户输入
问题描述
我有一个主要课程,要求用户写一个数字(int num)。这个数字将是另一个类中数组的大小。我将使用 Math.random 填充该数组。
这是主类:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Write amount of numbers between 0-99: ");
int num = input.nextInt();
IckeMain im = new IckeMain();
im.setNum(num);
im.fillArray();
}
这是另一个类:
public class IckeMain {
Scanner inread = new Scanner (System.in);
int num;
int [] array = new int [num];
int [] nyArr = new int [num];
public void fillArray () {
System.out.println("You chose: " + num + " with size: " +array.length);
for (int j=0; j<num; j++) {
array[j] = (int)(Math.random() * 99);
System.out.println("Unsorted: " +array[j]);
}
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
现在,假设我在主类中输入“5”。这是我将得到的输出。
Write amount of numbers between 0-99:
5
You chose: 5 With size: 0
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
因此,显然变量 num 设置为用户指定的数字。但是,不知何故,考虑到它打印 0,该数组似乎无法“获取”该数字。这是为什么呢?
解决方案
这是因为您的数组声明 -
int [] array = new int [num];
int [] nyArr = new int [num];
在 num = 0 时发生。在将 num 值设置为 5 后不会发生这些初始化。因此,ArrayIndexOutOfBoundsException
声明的数组的差异和索引 0 本身实际上是空的,根本没有大小。
你可以做
array = new int[num];
nyArr = new int [num];
在 setNum() 方法中,使 num 的新值反映在数组大小中。
推荐阅读
- youtube-api - YouTube API:获取直播开始时间和当前长度
- mysql - 左连接两个表,如果两个表中都存在值,则保留右表中的最新值
- javascript - 我想制作一个清晰的搜索字段。我在哪里做错了?
- python-3.x - Jenkins Python解释器路径:Python解释器路径中不允许有空格
- android - getDatePicker() 作为未解析的参考
- javascript - 用户看到元素后发送 Ajax 请求
- swift - UIView-Encapsulated-Layout-Width 和 LayoutConstraint
- javascript - 排序以字母开头的数组字符串
- javascript - 使用三元运算符检查数组中的值
- amazon-web-services - 自助数据能力栈?