[英]Array out of bounds - Basic Java
我正在學習如何用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();
}
}
將cargarAlturas()
函數中的return語句更改為
return alturas[cont-1];
而且您會沒事的。 實際上,for loop
之后的cont值為4。由於您的array
大小為4,並且您正在訪問第5個變量,它將給您ArrayIndexOutOfBoundException.
您要聲明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;
到該行被執行時,cont已從0變為1到2變為3,然后在循環結束時變為4。
return alturas[cont]; // This is an error accessing an element that doesn't exist.
考慮到程序其余部分的編寫方式,看來Alturas
應該是global
。 因為在這里使用整個array
所以返回single element
沒有任何意義。 此行也在array
末尾運行:
promedio = (alturas[1] + alturas[2] + alturas[3] + alturas[4] + alturas[0])
問題來了,當length
為4
且0-indexed
為0-indexed
時,您正在引用alturas[4]
循環后,以下return alturas[cont];
嘗試從數組中獲取索引為“ 4”的element
時發生崩潰,但是只有4個元素,因此3是max
有效index
。 還有兩個缺陷:
alturas[]
僅包含四個elements
。 alturas[4]
訪問第五個element
。 這就是為什么array out of bound exception
您的問題在於這段代碼。
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]
,這會導致數組超出范圍錯誤
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語句也應該像這樣:
return alturas[cont-1];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.