次の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文をつけ加えればいいと思うのですが。どこにどうつければよいのかわかりません。お願いします。
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;
}
とするような感じで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
式の型は配列型で int に解決済...
-
Javaのファイル名チェックについて
-
javaでcsvファイル読込時の改行...
-
Javaで電卓を作りたい
-
JAVAでCの関数ポインタのような...
-
javaでカレンダー作成
-
SwingでJtableのヘッダ行が表示...
-
javaの課題・・
-
JTableのセルの背景色について
-
コード中の謎のエラー
-
リサージュ図形
-
(Swing)JTextFieldを半角のみ入...
-
JAVA エラー 式の開始が不正で...
-
JAVA EOFの検出 (条件文で「...
-
BufferedImageをbyte[]に変換っ...
-
C#で、デリゲートからその関数...
-
intが負の時に投げる例外はあり...
-
西暦 -> 年号、年号 -> 西暦の...
-
二分探索木で例えば1〜10の値を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javaでcsvファイル読込時の改行...
-
java spring でエラーが出て困...
-
DataSet(DataTable)の使い方
-
「配列定数は、イニシャライザ...
-
JUnit4のアノテーションについて
-
C#で実行時にメソッドの返り値...
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
c# デリゲート関連の命名について
-
java streamでenum配列への変換
-
intが負の時に投げる例外はあり...
-
Java 初心者 int型の取り扱い方
-
C++からC#のdllを参照する際、...
-
アンマネージDLLで、ダイアログ...
-
【C#】フォームをなめらかに移動
-
(Swing)JTextFieldを半角のみ入...
-
Javaで簡単なアニメーションを...
-
javaのエラーの意味がわかりま...
-
C#で判断文(三択)の省略形は...
-
共有メモリについて
おすすめ情報