簡體   English   中英

數組越界-Basic Java

[英]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])

問題來了,當length40-indexed0-indexed時,您正在引用alturas[4]

循環后,以下return alturas[cont]; 嘗試從數組中獲取索引為“ 4”的element時發生崩潰,但是只有4個元素,因此3是max有效index 還有兩個缺陷:

  • 不要像Pascal那樣一開始就聲明所有變量;
  • 發生錯誤時,請先查看堆棧跟蹤。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM