多次尝试后ArrayIndexOutOfBoundsException错误

时间:2013-11-03 23:30:53

标签: java arrays indexing

我尝试了一千零一种方法来执行此代码并为每个数组地址分配一个特定的时间,但它总是给我一个索引错误。我不能告诉我的错误,请帮忙..谢谢

仅供参考我们使用提供的输入类,所以不要介意ITI1120.readDouble()行

System.out.println("Enter a maximum time: ");
double max = ITI1120.readDouble();
System.out.println("Enter a time step: ");
double h = ITI1120.readDouble();
double [] t = new double[] {};
int k = 0;
t[k] = 0.0;
while (t[k]<=max)
{
  k = k + 1;
  t[k] = t[k-1] + h;
  System.out.println(t[k]);
}

3 个答案:

答案 0 :(得分:1)

  

我尝试了一千零一种方法来执行此代码

一千?了解如何使用调试器。这很明显。

您有最长时间和时间步长。我计算了存储所有这些时间所需的数组元素的数量:

int n = (int)max/h + 1;

然后用该长度声明数组。

System.out.println("Enter a maximum time: ");
double max = ITI1120.readDouble();
System.out.println("Enter a time step: ");
double h = ITI1120.readDouble();
// This is an array of length zero.
int n = (int)max/h + 1;
double [] t = new double[n];
int k = 0;
t[k] = 0.0;
while (t[k]<=max)
{
  k = k + 1;
  // There's no t[1] in a zero length array.
  t[k] = t[k-1] + h;
  System.out.println(t[k]);
}

答案 1 :(得分:0)

您应该指定数组t的大小,因为您尝试访问不存在的元素t[0]

答案 2 :(得分:0)

首先指定数组的大小t。

第二: 可以说你的数组的索引是10,k当前是10。 在你的while循环中,你向k添加+1,k现在是11。 下一个:

t[k] = t[k-1] + h;

这意味着:

t[11] = t[11-1] + h;

由于你的索引是10,这也会导致outOfBoundException