我正在学习如何用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();
}
}
答案 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]
为length
且4
0-indexed
的问题就出现了
答案 4 :(得分:0)
循环后,当您尝试从数组中获取索引为“4”的return alturas[cont];
时,以下element
崩溃,但只有4个元素,因此3 max
有效{{ 1}}。
还有两个缺点:
答案 5 :(得分:0)
alturas[]
只有四个elements
。 alturas[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];