Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Math.random()による乱数

二次元配列上の「0」の部分をランダムに選ぶプログラムを書いたのですが
実行中に止まってしまいます。
なにか、問題があるのでしょうか・・・?
もし、分かる方いましたら、お願い致します・・・;

ちなみに、hai[2][2]〜hai[5][5]の範囲での検索で、
hai[2][2]・hai[5][5]は除外しなくてはいけません・・・。
二次元配列は、後に大きくすることを考慮して、とのことです。

よろしくお願いします。


public class RandomTest{
    public static void main(String[] args){
        int x=1,y=1;
        int hai[][]= {{0,0,0,0,0,0,0},
                      {0,1,1,1,1,1,0},
                      {0,1,0,1,0,1,0},
                      {0,1,0,1,0,1,0},
                      {0,1,0,1,0,1,0},
                      {0,1,0,0,0,1,0},
                      {0,1,1,1,1,1,0},
                      {0,0,0,0,0,0,0}};
        
        int lng =hai.length-1;
        while(hai[y][x]!=0){   //添え字2〜 の範囲
            while(y < 2){ y=(int)(Math.random() * lng); }
            while(x < 2){ x=(int)(Math.random() * lng); }
            if( y==2 && x==2 ){ y =x =1;}     //[2][2]除外
            if( y==lng-1 && x==lng-1 ){ y =x =1; }   //[5][5]除外
        }
    }
    
}

6

回答

2665

閲覧

6件の回答

評価

0

デバッグ文でも挟んでみましょう。

評価

0

mioさん

ありがとうございます。
デバック文とは、System.out.printlnのことでしょうか。
コマンドプロンプトが現れた時点で軽いフリーズ?になってしまうので
どこが原因なのか、まったくわからないのです・・・

評価

0

実際挟んでみたんですか?

評価

0

mioさん

mioさんのいうとおり、いま挟んでみました。
どうやら、最初のwhile文から抜けられない場合があるようです。
ひとまず、どこが悪いのか分かりました。
ありがとうございます。

ところで、何度かやっていれば抜けられない筈ないですよね・・・??
条件が、よくないのでしょうか・・・

評価

0

すみません!解決しました!!
デバック文いろいろ試したら、わかりました。
本当にたすかりました・・・

ありがとうございました!

評価

0

なにを表示してみたんでしょうか?
意味のない文字列は、場所を特定することはできますが、原因を特定することはできません。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。