- ベストアンサー
JAVAのプログラムソースコードで10匹のタートルが六角形を描く競争をするプログラム
- 次のJAVAのプログラムソースコードを教えてください。
- 10匹のタートルが六角形を描く競争をするプログラムで、どのタートルが次の辺を描くかはランダムに決め、いずれかのタートルが六角形を描き終わったら、プログラムを終了するものとします。
- 具体的には0~9の乱数を発生させ、出た番号(添字)に相当するタートルに次の辺を描かせて、どのタートルが一番早く六角形を描き終わるかを競争するプログラムです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>for(int j = 0; j < 6; j++){ > for(int i = 0; i <10; i=(int)(Math.random()*10)){ > hm[i].fd(10); // hm[i] に代入されている > hm[i].rt(360/6); // タートルに対するメソッド呼び出し > } >} ↑でおそらく hm[i].fd(10);←10歩前進 hm[i].rt(360/6);←60度方向転換 としているのでしょう。 for(int i = 0;i < 10;i = (int)(Math.random()*10)){ } ↑のfor文は無限ループになりますね。 だからこの中にbreakを入れたいんでしょうけど… while(true){ hm[i].fd(10); // hm[i] に代入されている hm[i].rt(360/6); // タートルに対するメソッド呼び出し } とする方が分かり易いかな。 (たぶん…個人差かもしれませんが。) ??? for(int j = 0;j < 6;j++){ } ↑は一体??? 変数jって外側のfor文の中で使われていませんよね? どう回すつもりなんすか? とりあえずbreakですが、 内側のfor文で hm[i].fd(10);←10歩前進 hm[i].rt(360/6);←60度方向転換 の後にそれぞれの亀について正6角形が書き終わっているかどうかを判断して、 書き終わってる亀がいたらbreakすればいいでしょう。 たとえば -------------------------------------------------- boolean 書き終わった亀がいるかフラグ = false; //初期値false:いない for(int k = 0;k < hm.length;k++){ if(hm[k].書き終わったか()){ //書き終わった 書き終わった亀がいるかフラグ = true; //true:いる } } if(書き終わった亀がいるかフラグ == true){ break; } -------------------------------------------------- を入れる感じでしょうか。 Turtleクラスに 書き終わったか()メソッド がなければ、 int[] Turtleクラスのfdメソッドが呼ばれた回数 = new int[hm.length]; ↑の配列のindexはhmのindexに対応。 の配列などを用意しておいて、fdが呼ばれるたびにカウントアップすればいいでしょう。 で、 if(Turtleクラスのfdメソッドが呼ばれた回数[k] == 6){ break; } とするような感じで。
お礼
回答ありがとうございます! 大変わかりやすく、理解できることができました☆ 本当にありがとうございました。