作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将获胜者添加到所比较的牌中。我有并发修改错误。我正在尝试将数组堆添加到获胜者数组列表中,但出现错误。
import java.util.ArrayList;
public class Deck {
ArrayList<Card> deck = new ArrayList<Card>();
ArrayList<Card> player1 = new ArrayList<Card>();
ArrayList<Card> player2 = new ArrayList<Card>();
ArrayList<Card> pile = new ArrayList<Card>();
boolean winner;
public Deck(){
}
public void createDeck(){
for(int i =0; i<4; i++){
for(int j =1; j<15;j++){
if(i==0) deck.add(new Card("Spades", j));
if(i==1) deck.add(new Card("Hearts", j));
if(i==2) deck.add(new Card("Clubs", j));
if(i==3) deck.add(new Card("Diamonds",j));
}
}
}
public void splitDeck(){
for(int i = 0; i< 52;i++){
int r = (int) (Math.random()*(51-i));
if(i%2==0){
player1.add(deck.get(r));
}
else{
player2.add(deck.get(r));
}
deck.remove(r);
}
}
public int [] war(){
int[]score = {0,0};
for(Card c : player1){
int x = player1.indexOf(c);
if(c.getValue() > player2.get(x).getValue()){
winner = true;
score[0]++;
pile.add(player1.get(x));
pile.add(player2.get(x));
distributeCards();
}
else if(c.getValue() <player2.get(x).getValue()) score[1]++;
distributeCards();
}
return score;
}
public void distributeCards(){
if(winner==true){
for(int i = 0; i<pile.size(); i++){
player1.add(pile.get(i));
}
}
else{
for(int i = 0; i<pile.size(); i++){
player2.add(pile.get(i));
}
}
}
public String warGame(){
String print= "";
for(Card c : player1){
int x = player1.indexOf(c);
if(c.getValue() > player2.get(x).getValue()){
print+= "\n"+"Player1 won";
}
else if(c.getValue() <player2.get(x).getValue())
print+="\n"+"Player2 won";
else if(c.getValue() ==player2.get(x).getValue())
print+= "\n"+"Its a tie";
}
return print;
}
}
错误消息是...
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at Deck.war(Deck.java:41)
at War.main(War.java:7)
最佳答案
从内部war()
在哪里迭代 ArrayList player1
您正在调用distributeCards()
它修改 player1
。您无法在迭代时更改列表 - 这就是为什么您会得到 ConcurrentModificationException
(阅读docs以获取进一步说明)。
解决方案:复制player1
到 tmp 列表 - 并修改该 tmp 列表,并且仅在完成遍历 player1
后- 将 tmp 分配给 player1
。 (同样的逻辑适用于 player2
)
关于Java 卡牌游戏与 ArrayList 之战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28013068/
我正在尝试模拟“发现它!”的套牌用 Python 制作的卡片。对于那些不知道什么是“Spot it!”的人is- 这是一种流行的纸牌游戏,一副牌有 55 张牌,每张牌上有 8 个随机符号(例如球、波浪
我目前正在尝试解决与其他人编写的程序相关的问题,该程序使用 Jackcess 版本 1.1.8 将信息写入 Access 数据库。在向给定 Access 表添加 400 万行的运行中,出现以下异常:
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我是一名优秀的程序员,十分优秀!