获取ArrayIndexOutOfBoundsException java

时间:2015-05-19 22:47:43

标签: java indexoutofboundsexception

我的程序使用多线程计算一些东西。我测试了它,同时给阵列一个像10这样的硬编码长度,我的程序运行正常。但是我现在使用'length'的方式,我在这一行上得到一个“数组越界异常”:array[i] = Integer.parseInt(splited[i]); 在我得到任何输出之前,无法弄清楚原因。有人可以帮忙吗?谢谢。

import java.util.*;

public class Stats {

    static int length;
    static int[] array = new int[length];


    private static class WorkerThread extends Thread 
    {  

       //...some stuff with threads 
    } 


    public static void main(String[] args) { 


        Scanner keyboard = new Scanner(System.in);

        System.out.println("Please enter the integers: ");
        String line = keyboard.nextLine();
        //split line by space and store each number as a sting 
        //in a string array
        String[] splited = line.split("\\s+");
        //get length of string array of numbers
        length = splited.length;

        //convert string to int and store in int array
        for(int i=0; i<length; i++)
        {
            array[i] = Integer.parseInt(splited[i]);
        }

        //...some stuff with threads
    } 
}

1 个答案:

答案 0 :(得分:2)

使用

静态初始化数组
static int length;
static int[] array = new int[length];

在初始化时长度为0,因此你得到一个0大小的数组 - &gt;第一次尝试时出界。在之后更改长度时,这不会动态重新分配新数组。

您应该在知道长度时分配数组:

    length = splited.length;
    array = new int[length];

    //convert string to int and store in int array
    for(int i=0; i<length; i++)
    {
        array[i] = Integer.parseInt(splited[i]);
    }

现在,新阵列将适合该线路。不要担心旧的,它会被垃圾收集。