是否可以先拥有数组声明并在循环中对其进行初始化?

时间:2018-09-01 16:40:19

标签: java

我最近在一个程序上工作,我希望该程序读取一个非负值,然后在每次迭代中初始化数组。我声明了数组。这是代码。

import java.util.*;
import java.lang.*;
class Array
{
    public static void main(String [] args) {
        Scanner in = new Scanner(System.in);
        int i = 0;
        int [] array;
        boolean end = false ;
        while (end != true)
        {
            array = new int[i];
            int x = in.nextInt();
            if(x > 10)
            {
                array[i] = x ;
            }
            if(x < 0)
            {
                end = true;
                for (int j : array)
                {
                    System.out.print(x + " ");
                }
            }
            else
                i++;
        }
    }
}

当我执行此代码时,我得到一个异常提示

  

线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:0           在Array.main(Array.java:15)

当我给一个大于10的值时,它将打印数组中的负数。这种声明数组并动态更改大小的方法正确吗?

1 个答案:

答案 0 :(得分:0)

在初始化int[] array;时将初始化大小为0的数组。之后,您尝试访问大小为0的数组元素,因此得到一个IndexOutOfBoundsException。数组初始化后,就无法更改其大小。
为此,您将必须使用列表,例如ArrayList

这些大小可以在初始化后扩展或更改。