前提・実現したいこと
ブラックジャックの作成途中でエラーが出てしまい解決したいです!
以下のエラー文が出力されました。
発生している問題・エラーメッセージ
エラーメッセージブラックジャックをこれから始めます!! カードを配りますね Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 at java.util.ArrayList.rangeCheck(ArrayList.java:657) at java.util.ArrayList.get(ArrayList.java:433) at Campkadai.Dealer.open(Dealer.java:38) at Campkadai.Dealer.checkSum(Dealer.java:55) at Campkadai.Blackjack.main(Blackjack.java:16)
該当のソースコード
User.Java import java.util.ArrayList; public class User extends Human { protected ArrayList<Integer> cards = new ArrayList<Integer>(); public void setCards(ArrayList<Integer> drawCard) { for(int i= 0;i<drawCard.size();i++){ myCards.add(drawCard.get(i)); } } public int open() { int total = 0; for(int i =0; i<=myCards.size(); i++) { if(10 <= myCards.get(i)) { total += 10; }else { total += myCards.get(i); } } return total; } public boolean checkSum() { if (open() < 17) { return true; }else{ return false; } } }
Human.Java import java.util.ArrayList; public abstract class Human { protected ArrayList<Integer> myCards = new ArrayList<Integer>(); abstract public int open(); abstract public void setCards(ArrayList <Integer> drawCard); abstract public boolean checkSum(); }
Dealer.Java import java.util.ArrayList; import java.util.Collections; public class Dealer extends Human { protected ArrayList <Integer> cards = new ArrayList<Integer>(); public Dealer() { for(int n=1; n<=4; n++) { for(int i=1; i<=13; i++) { cards.add(i); } } Collections.shuffle(cards); } public ArrayList<Integer> deal(){ ArrayList<Integer> setCards = new ArrayList<Integer>(); setCards.add(cards.get(0)); setCards.add(cards.get(1)); cards.remove(0); cards.remove(0); return setCards; } public void setCards(ArrayList<Integer> drawCard) { for(int i= 0; i<drawCard.size(); i++){ myCards.add(drawCard.get(i)); } } public int open() { int total = 0; for(int i=0; i<=myCards.size(); i++) { if(0<= myCards.get(i)) { total += 10; }else { total += myCards.get(i); } } return total; } public ArrayList<Integer> hit(){ ArrayList<Integer>setCards = new ArrayList<Integer>(); setCards.add(cards.get(0)); cards.remove(0); return cards; } public boolean checkSum() { if (open() < 17 ) { return true; }else{ return false; } } }
BlackJack.Java public class Blackjack { public static void main(String[]args) { Dealer dealer = new Dealer(); User user = new User(); System.out.println("ブラックジャックをこれから始めます!!"); System.out.println("カードを配りますね"); dealer.setCards(dealer.deal()); user.setCards(dealer.deal()); dealer.checkSum(); while (dealer.checkSum() == true) { dealer.hit(); dealer.setCards(dealer.myCards); break; } System.out.println("ディーラーの手札はこちらです‼!"); while (user.checkSum() == true) { dealer.hit(); dealer.setCards(dealer.myCards); break; } System.out.println("あなたの手札はこちらです‼"); user.checkSum(); System.out.println("ディーラーは"+ dealer.myCards); System.out.println(dealer.open()); System.out.println("あなたは"+ user.myCards); System.out.println(user.open()); if(user.open() == 21) { System.out.println("ブラックジャック!あなたの勝ち"); }else if(user.open() < 21 && dealer.open()<user.open() || dealer.open()>21){ System.out.println("あなたの勝ち"); }else if(user.open() > 21){ System.out.println("バースト!あなたの負け"); }else if(dealer.open() ==21 || dealer.open() <=21 && user.open()<dealer.open()){ System.out.println("あなたの負け"); }else if(user.open() == dealer.open() || user.open()>21 && dealer.open()>21){ System.out.println("引き分け"); } } }
試したこと
エラーコードから配列内の数字を変更しましたが解決しませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
コードはテキストで提示しましょう
質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
画像での質問はやめましょう。
識別できないし、仮にできても
『再現率が低くなる』です。
たとえば、『半角スペースにすべきところを全角スペースにしている』とか。
反転させてやっとわかることを『プロだからわかるだろ』とか暴論。
それと、『エラーメッセージぐらいは読みましょう』。
エラーメッセージは怒声でも罵倒でも罵声でもハラスメントでもなく、
『コンパイラ等からメッセージ』です。
つまり、今の状態は『相手の話を聞かずに逆ギレしている人』です。
そういう人はコミュニケーションなんて取れませんよね。
お答えいただきありがとうございます。
こちらを使うのに慣れていませんでしたので修正させていただきました。
エラーメッセージ自体も調べたのですが、配列、リストの範囲をこえているというのは理解できました。
また、個人的なのですが初学者ということもあり経験豊富な皆様の意見を頂きたかったです。
今ケータイからなので確かめられないので、
blackjack.javaの16行目はどこになっていますか?
ご返信ありがとうございます。
16行目は
dealer.checkSum();
になっております。
回答6件
あなたの回答
tips
プレビュー