前提・実現したいこと
Java初心者です
お金というトランプの遊びをjavaで現在書いています
①重複した要素のあるdeckリストをシャッフルしたのちにplayerがdeckリストの一番上からdeck.get(0);をして要素を取り出したとき、例えばその要素が100ならplayerリストに追加してまた別の100の要素をopponentから1枚受け取ってopponentの100の要素を1枚削除という条件分岐の書き方。500、1000、2000の場合を含む
②例えば1000の要素をplayerが山札から引いたとき、opponentの手札リストに[100,100,100,100,100]しかない場合などがあると思います。その時にopponentの全要素をplayerにaddしてopponentの全要素を削除する条件分岐の書き方
③例えばplayerがdeckから2000の要素を引いたとき、opponentのリストの要素は[1000,1000,500,500,500,500]だったとする。この時、2000の要素はないので①の条件分岐は使えない。必要最小限の組み合わせを用いて(ここでは1000を2枚)playerへaddしてopponentから要素を削除する条件分岐の書き方
①はなんとか発生している問題にあるようなソースコードを書きましたが、エラーが出ました。IndexOutOfBoundsExceptionindexで(100)の99番目にはないよ!というエラーだと思いますがここをどうにかして重複して存在する100の要素のどれか・・・というソースコードを書きたいです。②と③は1週間くらい考えましたが全く思いつきません。どなたか教えてください
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
// 引いた手札と同額のカードを相手から貰うメソッド
public void takeOpponentCard(int num) { if(num == 100) { player.add(opponent.get(100)); opponent.remove(100); } else if(num == 500) { player.add(opponent.get(500)); opponent.remove(500); } else if(num == 1000) { player.add(opponent.get(1000)); opponent.remove(1000); } else if(num == 2000) { player.add(opponent.get(2000)); opponent.remove(2000); } }
// 引いた手札と同額のカードを相手がプレイヤーから貰うメソッド
public void takePlayerCard(int num) {
if(num == 100) {
opponent.add(player.get(100));
player.remove(100);
} else if(num == 500) {
opponent.add(player.get(500));
player.remove(500);
} else if(num == 1000) {
opponent.add(player.get(1000));
player.remove(1000);
} else if(num == 2000) {
opponent.add(player.get(2000));
player.remove(2000);
}
エラーメッセージ
該当のソースコード
Java
ソースコード
public class Deck {
// 山札の配列メソッド
public void createList() {
deck = new ArrayList<>();
int oneHundredCount = 32;
int fiveHundredCount = 16;
int thousandCount = 4;
int twoThousandCount = 2;
for(i = 1; i <= oneHundredCount; i++) { deck.add(100); } for(i = 1; i <= fiveHundredCount; i++) { deck.add(500); } for(i = 1; i <= thousandCount; i++) { deck.add(1000); } for(i = 1; i <= twoThousandCount; i++) { deck.add(2000); } Collections.shuffle(deck); /* プレイヤー・相手の手札リストと5枚引く行為のメソッド*/
public void playerOpponentDeck(){
player = new ArrayList<>();
player.add(deck.get(0)); player.add(deck.get(1)); player.add(deck.get(2)); player.add(deck.get(3)); player.add(deck.get(4)); opponent = new ArrayList<>(); opponent.add(deck.get(5)); opponent.add(deck.get(6)); opponent.add(deck.get(7)); opponent.add(deck.get(8)); opponent.add(deck.get(9));
// index番号1~10を削除する(subListメソッド)
deck.subList(0, 10).clear();
}
// カードを交互に引いていくためのメソッド
public void playerDraw() {
if(drawCount % 2 == 0) { player.add(deck.get(i)); drawCount++; } else { opponent.add(deck.get(i)); drawCount++; } }
// 引いた手札と同額の手札がなかった場合の釣銭メソッド
public void ChargeCard(List<Integer> list) {
charge = new ArrayList<>();
for(i = 1; i <=50; i++) {
charge.add(100);
}
for(i = 1; i <=50; i++) {
charge.add(500);
}
for(i = 1; i <=50; i++) {
charge.add(1000);
}
for(i = 1; i <= 50; i++) {
charge.add(2000);
}
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/09 05:44