-1

我对这个例外有很大的麻烦。我是 Java 编程(以及编程)的新手,所以.. 为什么,当第二类返回两个数组时出现异常?此外,当只有一个数组返回时(fe "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)

先感谢您!

4

5 回答 5

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]);

因此,调试您的程序并找到您的程序中存在此类情况的位置,以便您可以修复它们。

于 2013-08-27T16:47:18.810 回答
0

IndexOutOfBoundsException当您尝试访问不存在的数组中的位置时发生:

例如。

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

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

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

于 2013-08-27T16:39:40.430 回答
0

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

if (Pula[bekaxd]>0) {

它抛出错误。

于 2013-08-27T16:43:00.557 回答
0

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

于 2013-08-27T16:49:03.130 回答
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++;
于 2013-08-27T17:00:39.097 回答