[英]Java: Array Index Out of Bounds
我得到這個例外:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
at Vindu.<init>(setevelger.java:64)
at setevelger.main(setevelger.java:22)
當我運行這段代碼時:
public knapp seter[]=new knapp[100]; //knapp means button
int rad=0; //rows
int sete=0; //seats
int antallSeter=0; //number of seats
for (int i=0;i<10;i++){
for (int j=0;j<10;j++){
seter[antallSeter]= new knapp("Rad "+(rad+1)+", Sete "+(sete+1));
seter[antallSeter].setBackground(Color.GREEN);
add(seter[antallSeter]);
antallSeter++;
if(j==10){
sete=0;
}else{
sete++;
}
}
rad++;
}
//creates an eventlistener
Knappelytter lytteren = new Knappelytter();
seter[antallSeter].addActionListener(lytteren);
pack();
如果我這樣做:
public knapp seter[]=new knapp[120]; //knapp means button
我收到此錯誤:
Exception in thread "main" java.lang.NullPointerException
at Vindu.<init>(setevelger.java:64)
at setevelger.main(setevelger.java:22)
創建窗口時,這兩個錯誤都會在運行時出現。
因此,該代碼應該創建100個按鈕並將它們存儲在一個數組中,並且每個按鈕都具有行號和座位號。
我被困住了,我不知道該看哪里了。
我是否應該使用arraylist?
在for循環中,antalSetter在最后一個循環中增加到100-第一個例外,如果將數組長度增加到120-您正在訪問索引為100的元素,該元素為空。
出現這兩個例外是因為倒數第二行:
seter[antallSeter].addActionListener(lytteren);
在double for
循環之外,其中antallSeter
增量將超出antallSeter
的現有( 第一個例外)或填充的( 第二個例外)索引的seter
。
如果我理解正確,並且您想向每個按鈕添加事件監聽器,則可以更改為:
// ..
if(j == 10) {
sete=0;
} else {
sete++;
}
seter[antallSeter].addActionListener(new Knappelytter());
}
rad++;
// etc ..
在您的代碼中,您具有以下重置代碼:
if (j==10) {
sete=0;
} else {
sete++;
}
但是,永遠不可能是j == 10
,所以sete
永遠不會重置為0。我不知道這是不是導致異常的原因,但這絕對是您的代碼有問題。 條件可能應該是if (j==9) { ...
用101大小初始化設置器。
public knapp seter[]=new knapp[101];
在最后一個循環之后, antallSeter
值為100。這是該行超出范圍的索引:
seter[antallSeter].addActionListener(lytteren);
您可能應該移動以下行:
Knappelytter lytteren = new Knappelytter();
seter[antallSeter].addActionListener(lytteren);
在外循環內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.