我的程序使用多线程计算一些东西。我测试了它,同时给阵列一个像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
}
}
答案 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]);
}
现在,新阵列将适合该线路。不要担心旧的,它会被垃圾收集。