0

我正在学习如何用 Java 编程,但我似乎无法解决数组问题。看,当我运行这个程序时,我得到一个数组越界错误:

我知道这可能很容易解决,但我不知道发生了什么。

public class AlturaPromedio {
float alturas[];
int cont;
float promedio;
InputStreamReader inputStream = new InputStreamReader(System.in);
BufferedReader buffRead = new BufferedReader(inputStream);

float cargarAlturas() throws IOException {
    alturas = new float[4];
    for (cont = 0; cont < alturas.length; cont++) {
        System.out.println("Escriba el nombre de la primer altura:");
        alturas[cont] = Float.parseFloat(buffRead.readLine());
    }
    return alturas[cont];

}

float calcularPromedio() {
    promedio = (alturas[1] + alturas[2] + alturas[3] + alturas[4] + alturas[0]) / 5;
    return promedio;
}

/*float calcularMaximo(){
    maximo = Alturas.min(alturas);
   */ 
    public static void main(String[] ar) throws IOException {
        AlturaPromedio personas = new AlturaPromedio();
        personas.cargarAlturas();
        personas.calcularPromedio();


}
}
4

8 回答 8

1

cargarAlturas()将函数中的return语句更改为

return alturas[cont-1];

你会没事的。实际上 for 之后的 cont 值loop是 4。由于你的array大小是 4 并且你正在访问第 5 个变量,它会给你ArrayIndexOutOfBoundException.

于 2013-08-24T05:40:04.230 回答
0

您的问题在于这段代码。

alturas = new float[4];
for (cont = 0; cont < alturas.length; cont++) {
    System.out.println("Escriba el nombre de la primer altura:");
    alturas[cont] = Float.parseFloat(buffRead.readLine());
}
return alturas[cont];

一旦 for 循环结束,cont其值为4. 所以return alturas[cont]尝试返回alturas[4],这会导致你的数组越界错误

于 2013-08-24T05:44:21.683 回答
0
alturas = new float[4]; 

这意味着您的数组 alturas 共有 4 个元素...现在,如果您看到这条线- promedio = (alturas[1] + alturas[2] + alturas[3] + alturas[4] + alturas[0])您正在尝试访问 alturas[4] 这实际上是第 5 个元素,将 0 视为第一个元素..

试试这个来解决它:

alturas = new float[5];

您的退货声明也应该是这样的:

return alturas[cont-1];
于 2013-08-24T05:46:28.273 回答
0

您将该alturas数组大小声明为 4 并访问第 5 个元素alturas[4]
容易出错的行是

 return alturas[cont];

这应该是

 return alturas[cont-1];

promedio = (alturas[1] + alturas[2] + alturas[3] + alturas[4] + alturas[0]) / 5;

这应该是

promedio = (alturas[1] + alturas[2] + alturas[3] + alturas[0]) / 5;
于 2013-08-24T05:40:13.417 回答
0

到执行此行时, cont 已经从 0 变为 1 到 2 到 3,然后在循环结束时变为 4。

return alturas[cont];  // This is an error accessing an element that doesn't exist.

考虑到程序其余部分的编写方式,它似乎Alturas应该是global. 返回 a 是没有意义的,single element因为您在array这里使用了整体。这条线array也在结尾:

promedio = (alturas[1] + alturas[2] + alturas[3] + alturas[4] + alturas[0])
于 2013-08-24T05:40:19.210 回答
0

问题来了,你在什么alturas[4]时候引用length40-indexed

于 2013-08-24T05:40:43.650 回答
0

return alturas[cont];循环后,当您尝试从数组中获取索引为“4”的索引时,以下崩溃element,但只有 4 个元素,因此 3 是max有效的index。还有两个缺陷:

  • 不要像 Pascal 那样在开头声明所有变量;
  • 发生错误时,首先查看堆栈跟踪。
于 2013-08-24T05:40:51.550 回答
0

alturas[]只有四个elementsalturas[4]访问第五element。这就是为什么array out of bound exception

于 2013-08-24T05:41:22.323 回答