我遇到这个例外很麻烦。我是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)
提前谢谢!
答案 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)
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++;