簡體   English   中英

Java:數組索引超出范圍

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

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