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

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

ただいまの
回答率

90.84%

  • Java

    12823questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 135

chiimon

score 1

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

ゲーム実行側   

public class TestMain {
    static int boardsize=9;

    public static void main(String[] args) {
        Mine mines[][];
        mines = new Mine[boardsize][boardsize];
        for(int i=0;i<boardsize;i++){
            for(int j=0;j<boardsize;j++){
                mines[i][j] = new Mine(i+","+j,false);
                //System.out.println(mines[i][j].getText()+","+mines[i][j].mineExis);
            }
        }

        int minenum=10;
        int m=0; //設置完了マイン数
        Random rnd;
        while(m<minenum){
            System.out.print("m="+m+":");
            rnd = new Random();
            int x = rnd.nextInt(boardsize+1); //とりあえず一つ座標を指定
            int y = rnd.nextInt(boardsize+1);

            while(mines[y][x].getMineExis()){ //すでにマインが設置されていれば何度でもやり直し
                rnd = new Random();
                x = rnd.nextInt(boardsize+1);
                y = rnd.nextInt(boardsize+1);
            }

            mines[y][x].setMineExis(true); //☆
            //mines[y][x].mineExis = true;
            System.out.println(x+","+y);
            m++;
        }
    }
}

マス情報保存クラス

public class Mine extends JButton{
    //JButton btn;
    boolean mineExis; //このマスにマインはあるかどうか
    boolean check; //このマスは調査済みかどうか
    int num; //周りにあるマインの数

    Mine(String btnName,boolean f){
        //btn = new JButton(btnName);
        super(btnName);
        mineExis=f;
        check=f;
        num=0;
    }

    public boolean getMineExis() {
        return mineExis;
    }

    public void setMineExis(boolean b) {
        this.mineExis=b;
    }
}

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

ご教示お願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/26 23:49

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

    キャンセル

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    ループ化の方法

    public class Gohkaku {     public static void main(String[] args){         int math = ne

  • 解決済

    国旗を表示させたい(続き)

    前提・実現したいこと btn [0][1][2]をクリックすると、それに対応した国旗が表示されるようにしたい。 ソースコード import java.awt.*;   

  • 受付中

    ENTER実行処理

    Enterキーを押して、次の処理に移るCUIを作りたいのですが、思うようにいきません。勇者の攻撃のあとと、HP、MP表示のあとEnter押すまで次の処理しないようにしたのですが、教

  • 解決済

    javaで作れる学習プログラムってどのようなものが作れますか

    意図 javaを使って学習プログラムを作成してほしいといわれました。 しかし、イメージがわきません。 どんなものが作れるのでしょうか

  • 解決済

    スレッドの使い方について、口座システムを作りたい

    前提・実現したいこと Javaを用いて、二人(husbandとwife)が100円の出入金を繰り返すプログラムを2つのスレッドを使ってつくりたいのですが、「Thread[Thre

  • 解決済

    乱数から奇数・偶数を取り出したい

    整数型の配列変数dataを作成し、初期値は大きさ:10,値:1から100の乱数が入ります. 以下の回答のように、値をすべて表示し、その中の偶数の数と、奇数の数を表示したいです.

同じタグがついた質問を見る

  • Java

    12823questions

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