前提・実現したいこと
Javaでトランプのババ抜きを作っていてその中でarrayクラスの配列を参照して同じカードが2枚あったら捨てる(削除する)メソッドを作りたいのですが難しいです。
今はfor文2回で繰り返しているのですがおそらく配列の要素数が変わるためエラーが起きて実行できません。
発生している問題・エラーメッセージ
Exception in thread "main" java.util.ConcurrentModificationException
該当のソースコード
lang
1public ArrayList<Card> checkSameCards(Player p) { 2 ArrayList<Card> cards = p.getCardHand().getCards(); 3 ArrayList<Card> discards = p.getCardHand().getCards(); 4 for(Card c1: cards) { 5 for(Card c2: cards) {//エラーはこの行に出てます 6 if(c1.getNumber() == c2.getNumber()) { 7 if(c1 != c2) { 8 discards.add(c1); 9 discards.add(c2); 10 } 11 } 12 } 13 } 14 return discards; 15 }
以下がカードが同じかをチェックして捨てるプログラムです
lang
1for(Player p: playerList) { //実行しているgetGameメソッドの一部 2 if(p instanceof User) { 3 p.getCardHand().showAllCards(); 4 } 5 ArrayList<Card> cards = judge.checkSameCards(p); 6 for(Card c: cards) { 7 p.discardCard(c); 8 } 9 } 10 for(Player p: playerList) { 11 if(p instanceof User) { 12 p.getCardHand().showAllCards(); 13 } 14 }
参考までにプレーヤクラスも載せときます
lang
1public abstract class Player { //プレーヤクラス 2 /** プレーヤー名 */ 3 private String name; 4 /** 手札 */ 5 private CardHand hand = new CardHand(); 6 7 /** 8 * 名前を指定して、じゃんけんのプレイヤーを作る 9 * @param name プレイヤー名 10 */ 11 public Player(String name) { 12 super(); 13 this.name = name; 14 } 15 16 /** 17 * 自分の名前を外部に取得させる 18 * @return 名前 19 */ 20 public String getName() { 21 return name; 22 } 23 24 /** 25 * 自分の手札を外部に取得させる 26 */ 27 public CardHand getCardHand() { 28 return hand; 29 } 30 31 /** 32 * 自分の名前をセットする 33 * @return セットする名前 34 */ 35 public void setName(String name) { 36 this.name = name; 37 } 38 39 /** 40 * 相手の手札から手札を一枚引く 41 * @return 引いたカード 42 */ 43 public void getCardHand(Player p) { 44 Card c = p.hand.getCardAtRandom(); 45 hand.addCard(c); 46 } 47 48 public void addCardHand(Card c) { 49 hand.addCard(c); 50 } 51 52 public void discardCard(Card c) { 53 hand.getCards().remove(c); 54 } 55 56 /** 57 * 手札の枚数を表示する 58 */ 59 public void showNumberOfCards() { 60 System.out.println(name+"さんの手札は"+hand.getNumberOfCards()+"枚です."); 61 } 62 63}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/06 02:35 編集