//poker,playerCard是ArrayList,目的是把poker里的加进playerCard,请高手看看为什么越界了public ArrayList<String> setPlayerCard() {
Random rand = new Random();
int j = rand.nextInt(poker.size());
for (int i = 0; i < 39; i++) {
while (true) {
if (j == poker.indexOf("黑") || j == poker.indexOf("红") || j == poker.indexOf("梅") || j == poker.indexOf("方")) {
j = rand.nextInt(poker.size());
} else {
break;
}
}
if (j < poker.indexOf("红")) {
playerCard.add(playerCard.indexOf("红"), poker.get(j));
} else if (poker.indexOf("红") <= j && j < poker.indexOf("梅")) {
playerCard.add(playerCard.indexOf("梅"), poker.get(j));
} else if (poker.indexOf("梅") <= j && j < poker.indexOf("方")) {
playerCard.add(playerCard.indexOf("方"), poker.get(j));
} else {
playerCard.add(poker.get(j));//Exception
}
poker.remove(j);
}
return playerCard;
}
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 107, Size: 107
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at deal.Dealer.setPlayerCard(Dealer.java:43)
Random rand = new Random();
int j = rand.nextInt(poker.size());
for (int i = 0; i < 39; i++) {
while (true) {
if (j == poker.indexOf("黑") || j == poker.indexOf("红") || j == poker.indexOf("梅") || j == poker.indexOf("方")) {
j = rand.nextInt(poker.size());
} else {
break;
}
}
if (j < poker.indexOf("红")) {
playerCard.add(playerCard.indexOf("红"), poker.get(j));
} else if (poker.indexOf("红") <= j && j < poker.indexOf("梅")) {
playerCard.add(playerCard.indexOf("梅"), poker.get(j));
} else if (poker.indexOf("梅") <= j && j < poker.indexOf("方")) {
playerCard.add(playerCard.indexOf("方"), poker.get(j));
} else {
playerCard.add(poker.get(j));//Exception
}
poker.remove(j);
}
return playerCard;
}
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 107, Size: 107
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at deal.Dealer.setPlayerCard(Dealer.java:43)
playerCard.add(poker.get( j -1));//Exception
while (true) {
if (j == poker.indexOf("黑") || j == poker.indexOf("红") || j == poker.indexOf("梅") || j == poker.indexOf("方")) {
j = rand.nextInt(poker.size());
} else {
break;
}
}
if (j < poker.indexOf("红")) {
playerCard.add(playerCard.indexOf("红"), poker.get(j));
} else if (poker.indexOf("红") <= j && j < poker.indexOf("梅")) {
playerCard.add(playerCard.indexOf("梅"), poker.get(j));
} else if (poker.indexOf("梅") <= j && j < poker.indexOf("方")) {
playerCard.add(playerCard.indexOf("方"), poker.get(j));
} else {
playerCard.add(poker.get(j));//Exception
}
poker.remove(j);
这里移除了,你能保证到最后,poker最低都有39个数字么?
不过我也尝试了你说的方法,还是出现index=size的越界问题
for (int i = 0; i < 39; i++) {
while (true) {
if (j == poker.indexOf("黑") || j == poker.indexOf("红") || j == poker.indexOf("梅") || j == poker.indexOf("方")) {
j = rand.nextInt(poker.size()); //错误应该出在这里,楼主能保证每次for循环都执行这句吗?要是进入while后直接break的话,你的j就没有变化了,就不能保证j<poker.size()
} else {
break;
}
}
if (j < poker.indexOf("红")) {
playerCard.add(playerCard.indexOf("红"), poker.get(j));
} else if (poker.indexOf("红") <= j && j < poker.indexOf("梅")) {
playerCard.add(playerCard.indexOf("梅"), poker.get(j));
} else if (poker.indexOf("梅") <= j && j < poker.indexOf("方")) {
playerCard.add(playerCard.indexOf("方"), poker.get(j));
} else {
playerCard.add(poker.get(j));//Exception
}
poker.remove(j);
}
j = rand.nextInt(poker.size()); //错误应该出在这里,楼主能保证每次for循环都执行这句吗?
// 要是进入while后直接break的话,
//你的j就没有变化了,就不能保证j<poker.size()