• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JAVAのプログラムソースコード)

JAVAのプログラムソースコードで10匹のタートルが六角形を描く競争をするプログラム

このQ&Aのポイント
  • 次のJAVAのプログラムソースコードを教えてください。
  • 10匹のタートルが六角形を描く競争をするプログラムで、どのタートルが次の辺を描くかはランダムに決め、いずれかのタートルが六角形を描き終わったら、プログラムを終了するものとします。
  • 具体的には0~9の乱数を発生させ、出た番号(添字)に相当するタートルに次の辺を描かせて、どのタートルが一番早く六角形を描き終わるかを競争するプログラムです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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; } とするような感じで。

akka99ei8cm
質問者

お礼

回答ありがとうございます! 大変わかりやすく、理解できることができました☆ 本当にありがとうございました。

関連するQ&A

専門家に質問してみよう