質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1872閲覧

booleanの代入が上手くいきません

chiimon

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/12/26 14:36

Javaを使ってGUI版マインスイーパを作ってます。
ゲームの初期設定で、マインを盤面全面のランダムな10マスに配置する処理が上手くいきません。
ここでは初期設定でマインを配置するコードのみ載せます

###ゲーム実行側   

java

1public class TestMain { 2 static int boardsize=9; 3 4 public static void main(String[] args) { 5 Mine mines[][]; 6 mines = new Mine[boardsize][boardsize]; 7 for(int i=0;i<boardsize;i++){ 8 for(int j=0;j<boardsize;j++){ 9 mines[i][j] = new Mine(i+","+j,false); 10 //System.out.println(mines[i][j].getText()+","+mines[i][j].mineExis); 11 } 12 } 13 14 int minenum=10; 15 int m=0; //設置完了マイン数 16 Random rnd; 17 while(m<minenum){ 18 System.out.print("m="+m+":"); 19 rnd = new Random(); 20 int x = rnd.nextInt(boardsize+1); //とりあえず一つ座標を指定 21 int y = rnd.nextInt(boardsize+1); 22 23 while(mines[y][x].getMineExis()){ //すでにマインが設置されていれば何度でもやり直し 24 rnd = new Random(); 25 x = rnd.nextInt(boardsize+1); 26 y = rnd.nextInt(boardsize+1); 27 } 28 29 mines[y][x].setMineExis(true); //☆ 30 //mines[y][x].mineExis = true; 31 System.out.println(x+","+y); 32 m++; 33 } 34 } 35}

###マス情報保存クラス

Java

1public class Mine extends JButton{ 2 //JButton btn; 3 boolean mineExis; //このマスにマインはあるかどうか 4 boolean check; //このマスは調査済みかどうか 5 int num; //周りにあるマインの数 6 7 Mine(String btnName,boolean f){ 8 //btn = new JButton(btnName); 9 super(btnName); 10 mineExis=f; 11 check=f; 12 num=0; 13 } 14 15 public boolean getMineExis() { 16 return mineExis; 17 } 18 19 public void setMineExis(boolean b) { 20 this.mineExis=b; 21 } 22}

この状態で実行すると、☆マークをつけた箇所で
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExceptionというエラーが出ます。
配列の不正な場所を見ているわけではないと思うので、このエラーがなぜ出るのかがわかりません。

ご教示お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

boardsizeが9の場合、
mines[0][0]からmines[8][8]までありますが、

x = rnd.nextInt(boardsize+1);
↑この値は0〜9までありえるのでArrayIndexOutOfBoundsExceptionとなります。

投稿2017/12/26 15:01

ketztaro

総合スコア101

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

アクセス出来る要素は、0からboardsize-1までです。

Java

1int x = rnd.nextInt(boardsize); 2int y = rnd.nextInt(boardsize);

投稿2017/12/26 14:46

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chiimon

2017/12/26 14:49

私の飛んだ勘違いで、0から9個分の乱数を作りたいので8でいいところをなぜか10にしてました・・・。 初歩的なミスでした、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問