首页 > 解决方案 > 将数组大小设置为来自另一个类的用户输入

问题描述

我有一个主要课程,要求用户写一个数字(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,该数组似乎无法“获取”该数字。这是为什么呢?

标签: javaarrays

解决方案


这是因为您的数组声明 -

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 的新值反映在数组大小中。


推荐阅读