如何修复“ArrayIndexOutOfBoundsException”?

时间:2013-08-27 16:35:21

标签: java indexoutofboundsexception

我遇到这个例外很麻烦。我是Java编程(以及编程也是)的新手,所以..为什么,当第二类返回两个数组异常出现?另外,当只返回一个数组时(f.e“return jakob;”),一切正常。 头等舱:

package mainpackage;

public class GraWojna {
int[] jakob = new int[24];
int[] gracz = new int[24];
public void Wojna() {

    System.out.println("tasowanie kart...");
    // kart w talii jest 48, bo 4* 12.. true?
    WojnaTasowanie tas = new WojnaTasowanie();

    tas.Tasowanie(jakob, gracz);
    int licznik = 0;
    while (licznik<23) {
        System.out.println("jakob:" + jakob[licznik]);
        licznik++;
    }


}

}

第二课:

package mainpackage;

import java.util.Random;


public class WojnaTasowanie {


int[] Tasowanie (int jakob[], int gracz[]) {
    int jakb[] = new int[23];
    int grcz[] = new int[23];
     Random generator = new Random();
     int licznik = 0;
     int[] Pula = new int[11];

    while (licznik<11){

        Pula[licznik] = 4;
        licznik++;
     }   
    licznik = 0;

        int passa = 0;
        int passb = 0;
    while (licznik<22) {

        passa = 5;
        passb = 5;
        System.out.println("step ----");

        while (passa<8){
        int bekaxd = generator.nextInt(11);


        if (Pula[bekaxd]>0) {
            Pula[bekaxd]--;
            passa = 15;
            jakob[licznik] = bekaxd;
        }



        while (passb<8){
            bekaxd = generator.nextInt(11);
            gracz[licznik] = bekaxd;
            System.out.println("licznik:" + licznik + "gracz: " + gracz[licznik] + "pula" + Pula[gracz[licznik]]);
            if (Pula[gracz[licznik]]>0) {
                Pula[gracz[licznik]]--;
                passb = 15;
            }

        }
        licznik++;

        }


    }

    return Tasowanie(jakob, gracz);

}

}

堆栈追踪:

 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 25
at mainpackage.WojnaTasowanie.Tasowanie(WojnaTasowanie.java:51)
at mainpackage.WojnaTasowanie.Tasowanie(WojnaTasowanie.java:76)
at mainpackage.WojnaTasowanie.Tasowanie(WojnaTasowanie.java:76)
at mainpackage.GraWojna.Wojna(GraWojna.java:12)
at mainpackage.Main.main(Main.java:16)

提前谢谢!

5 个答案:

答案 0 :(得分:1)

抛出

ArrayIndexOutOfBoundsException因为 -

  

抛出表示已使用非法访问数组   指数。该指数为负数或大于或等于   数组的大小。

我现在无法调试你的课程,但这里有一些例子,为什么一个程序会抛出这个异常 -

说你有 -

int[] integers = new int [2];

// This is fine since our array has two indexes which are 0 and 1 with length being 2    
integers[0] = 2;  

// However this not fine since our array has a length of 2. So there's no such index 2 so saying integers[2] would throw that error
integers[2] = 3;

// Likewise this is ok
System.out.println(integers[1]);

// But this will throe the same exception
System.out.println(integers[3]);

因此,调试程序并在程序中找到具有此类场景的位置,以便您可以修复它们。

答案 1 :(得分:0)

当您尝试访问不存在的数组中的位置时,会出现

IndexOutOfBoundsException: E.

int[] a = {7,12,5}

int ac = a[3] //Here index out of Exception

他们必须找到您尝试访问无效位置的位置。

答案 2 :(得分:0)

Pula数组有11个元素,但索引是0 .. 10.随机生成器正在生成int 11,因此在这里使用时(或任何地方使用随机数作为索引):

if (Pula[bekaxd]>0) {

它会抛出错误。

答案 3 :(得分:0)

这有点难以理解,但这就是我认为出了问题。在启动while (licznik< 22)的循环中,还有另一个循环启动while (passa < 8)。在内部循环中,您有licznik++。我猜这个内循环可能会运行太多次,导致licznik的值大于jakob数组的大小。

答案 4 :(得分:0)

你有licznik ++;在错误的循环中, 将它向下移动2行并离开内循环。

 while (passb<8){
            bekaxd = generator.nextInt(11);
            gracz[licznik] = bekaxd;
            System.out.println("licznik:" + licznik + "gracz: " + gracz[licznik] + "pula" + Pula[gracz[licznik]]);
            if (Pula[gracz[licznik]]>0) {
                Pula[gracz[licznik]]--;
                passb = 15;
            }

        }


        }
      licznik++;