【发布时间】:2014-02-28 21:00:42
【问题描述】:
我有一个很奇怪的问题,这个问题只在案例 3 和 4 中出现。
for(Sector sector : sectoren)
{
switch(sector.getCode())
{
case 1:
for(int i = 0; i<3; i++)
{
for(int j=0;j<3; j++)
{
Gebiedskaart gbk = gebiedskaarten.get(r.nextInt(gebiedskaarten.size()));
vakken[i][j].setGbk(gbk);
gebiedskaarten.remove(gbk);
}
vakken[2][2].setGbk(null);
}
case 2:
for(int i = 0; i<3; i++)
{
for(int j=4;j<7; j++)
{
Gebiedskaart gbk = gebiedskaarten.get(r.nextInt(gebiedskaarten.size()));
vakken[i][j].setGbk(gbk);
gebiedskaarten.remove(gbk);
}
}
vakken[2][4].setGbk(null);
case 3:
for(int i=4; i<7; i++)
{
for(int j=0;j<3; j++)
{
System.out.println(gebiedskaarten.size());
Gebiedskaart gbk = gebiedskaarten.get(r.nextInt(gebiedskaarten.size()));
vakken[i][j].setGbk(gbk);
gebiedskaarten.remove(gbk);
}
}
vakken[4][2].setGbk(null);
case 4:
for(int i = 4; i<7; i++)
{
for(int j=4;j<7; j++)
{
Gebiedskaart gbk = gebiedskaarten.get(r.nextInt(gebiedskaarten.size()));
vakken[i][j].setGbk(gbk);
//gebiedskaarten.remove(gbk); doet iets raar? moeten we nog naar kijken, hij blijft gewoon verwijderen tot de lijst leeg is
}
}
vakken[4][4].setGbk(null);
}
}
在代码中,您可以看到我为数组分配了一个值,然后我从 ArrayList 中删除了该值。你可以看到我已经把 System.out.println 放在那里,看看它做了什么,这是输出:
34
33
32
31
30
29
28
27
26
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
然后错误很明显:
Exception in thread "main" java.lang.IllegalArgumentException: n must be positive
at java.util.Random.nextInt(Random.java:300)
at domein.Spelbord.wijsGebiedskaartenToe(Spelbord.java:123)
at domein.Spelbord.<init>(Spelbord.java:19)
at domein.Spel.setWereldkaart(Spel.java:18)
at domein.DomeinController.maakWereldkaart(DomeinController.java:39)
at ui.Uc1.maakWereldkaart(Uc1.java:42)
at ui.ConsoleApplicatie.behandelUc1(ConsoleApplicatie.java:67)
at ui.ConsoleApplicatie.startSpel(ConsoleApplicatie.java:29)
at StartUp.main(StartUp.java:12)
Java Result: 1
我不知道发生了什么,也许你们知道?
【问题讨论】:
-
您的循环似乎只运行了 9 (3 * 3) 次,它怎么能打印出这么多?
-
循环的内部运行了 9 次,删除了 9 个元素 (35 -> 26)。所以剩下的输出(从 16 开始)是一些其他代码的结果。为了尽快获得更好的帮助,请尝试提供complete example。
-
您最后一次打印输出的
gebiedskaarten.size()是0,当传递给r.nextInt()时,它将传递一个非正数(0)到Random#nextInt,因此java.util.Random.nextInt中发生的错误(查看您的堆栈跟踪)。 -
这仍然不是可编译代码,要真正 100% 评估您的问题,我们需要更多代码...(但绝对不是您的所有代码!)但是我也相信有了
Random#nextInt上的当前答案,您就有足够的材料开始让它发挥作用。 -
问题是我忘记了break语句
标签: java arraylist switch-statement