teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/02/04 07:38

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -43,4 +43,14 @@
43
43
 
44
44
  本サイトで質問するなら**必ず以下を読んで適切にマークダウンを使ってください**。さっそく本質問を編集しなおしておくとよいですよ。
45
45
 
46
- [https://teratail.com/help#about-markdown](https://teratail.com/help#about-markdown)
46
+ [https://teratail.com/help#about-markdown](https://teratail.com/help#about-markdown)
47
+
48
+ ---
49
+ 追記:3つのカードが全て削除されてしまう問題に対して。
50
+
51
+ 元のループアルゴリズムですと同一のリストに対する単純な二重ループですので、同じダイヤの4でそれぞれ異なるインスタンスが3つありそれらをD4#1,D4#2,D4#3とすると
52
+ D4#1 vs D4#2 => この2つをdiscardsに追加
53
+ D4#1 vs D4#3 => この2つもdiscardsに追加
54
+ ...
55
+ のように、「同一のカードインスタンスを複数回discardsに格納し得る論理」になっている点がまずいですね。
56
+ 対処には色々方法が考えられれます。discardsへ追加する条件に、「c1もc2もdiscardsに含まれない」を追加するというのが最も単純と思います。含まれるかどうかをチェックするメソッドとしてコレクション一般にcontainsというのがありますので、D4#1.equals(D4#2)がfalseとなるようにCardクラスが定義されているならそれを使えます。D4#1.equals(D4#2)がtrueになるようでしたらcontainsは使えませんので別途自前でcontainsCardメソッドのようなものを定義する必要がでてきます。