数组越界 - 基本Java

时间:2013-08-24 05:37:57

标签: java arrays

我正在学习如何用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();


}
}

8 个答案:

答案 0 :(得分:1)

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

return alturas[cont-1];

你会没事的。实际上,loop之后的cont值为4.由于array大小为4且您正在访问第五个变量,它会为您提供ArrayIndexOutOfBoundException.

答案 1 :(得分: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;

答案 2 :(得分:0)

当这一行被执行时,cont从0到1变为2到3,然后在循环结束时变为4。

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

考虑到你的程序的其余部分的编写方式,Alturas似乎应该是global。返回single element是没有意义的,因为您在这里使用了整个array。此行也在array的末尾运行:

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

答案 3 :(得分:0)

alturas[4]length4

时,您引用0-indexed的问题就出现了

答案 4 :(得分:0)

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

  • 不要像Pascal那样在开头声明所有变量;
  • 发生错误时,请先查看堆栈跟踪。

答案 5 :(得分:0)

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

的原因

答案 6 :(得分: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],这会导致数组超出界限错误

答案 7 :(得分: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];