プロが教える店舗&オフィスのセキュリティ対策術

次のJAVAのプログラムソースコードを教えてください。

10匹のタートルが六角形を描く競争をするプログラムで、どのタートルが次の辺を描くかはランダムに決め、いずれかのタートルが六角形を描き終わったら、プログラムを終了するものとします。

具体的には0~9の乱数を発生させ、出た番号(添字)に相当するタートルに次の辺を描かせて、どのタートルが一番早く六角形を描き終わるかを競争するプログラムです。

public class Kyousou {
public static void main(String[] args){
TurtleFrame f = new TurtleFrame(600,300);
Turtle[] hm = new Turtle[10]; // 配列オブジェクトを生成
for(int i = 0 ; i < 10; i++){
hm[i] = new Turtle(i * 50 + 25,150,0); // タートルを生成,配列の各要素に代入
f.add(hm[i]);
}

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); // タートルに対するメソッド呼び出し
}
}
}
}
たぶんこれにbreak文をつけ加えればいいと思うのですが。どこにどうつければよいのかわかりません。お願いします。

A 回答 (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;
}
とするような感じで。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/06/13 14:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!