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