Javaのタートルグラフィックスで以下の画像のような移動をさせたいです
実現させたいこと
ある2つのメソッドを使用して完成させたい
望む結果は実現できたのですが、メソッドを使用しての実行ができません。
どのように書き換えたら良いでしょうか?
Turtleのインスタンスを20個生成し配列turtlesに格納します。
(生成するX, Y座標はどちらも 50.0以上350.0以上とする)
以下の条件でタートルを移動させます
・全タートルの移動先のY座標は、全タートルの移動前のY座標の平均値
・奇数に格納されているインデックスのX座標の移動先は、全タートルの移動前のX座標の最小値
・偶数に格納されているインデックスのX座標の移動先は、全タートルの移動前のX座標の最大値
・以下の2つのメソッドを使用して完成させる
Java
1 static void alignY(Turtle t1, Turtle t2) {//t2をt1のYに 2 double t1y = t1.getY(); 3 double t2x = t2.getX(); 4 t2.moveTo(t2x,t1y);//t2をt1のY座標に移動 xは変わらない、yはt1のもの 5 } 6 static void alignX(Turtle t1, Turtle t2) {//t2をt1のXに 7 double t2y = t2.getY(); 8 double t1x = t1.getX(); 9 t2.moveTo(t1x,t2y);//t2をt1のX座標に移動 xはt1のもの、yは変わらない 10 }
という条件のもとプロログラムを書きます。
発生している問題・エラーメッセージ
上記したメソッドを用いての記述方法がわかりません。
その代わりに
if(i % 2 == 0) { turtles[i].moveTo(maxBeta,ave); }else if(i % 2 != 0){ turtles[i].moveTo(minBeta, ave); }
と記述しています。
全体のソースコード
Java
1import javafx.scene.paint.Color; 2import tg.Turtle; 3import tg.TurtleFrame; 4 5public class Movekame { 6 static double getRandomDouble(double low, double high) { 7 double ans = 0.0; 8 double r = Math.random(); 9 ans = low + r * high; 10 return ans; 11 } 12 /*static void alignY(Turtle t1, Turtle t2) {//t2をt1のYに 13 double t1y = t1.getY(); 14 double t2x = t2.getX(); 15 t2.moveTo(t2x,t1y);//t2をt1のY座標に移動 xは変わらない、yはt1のもの 16 } 17 static void alignX(Turtle t1, Turtle t2) {//t2をt1のXに 18 double t2y = t2.getY(); 19 double t1x = t1.getX(); 20 t2.moveTo(t1x,t2y);//t2をt1のX座標に移動 xはt1のもの、yは変わらない 21 }*/ 22 23 public static void main(String[] args) { 24 int n = 20; 25 Turtle turtles[] = new Turtle[n]; 26 TurtleFrame f = new TurtleFrame(); 27 28 for(int i = 0; i < n; i++) { 29 double x = getRandomDouble(50.0,350.0); 30 double y = getRandomDouble(50.0,350.0); 31 turtles[i] = new Turtle(x,y,180.0); 32 f.add(turtles[i]); 33 } 34 ////// 35 for(int i = 0; i < n; i++) { 36 if(i % 2 == 0) { 37 turtles[i].setColor(Color.RED); 38 } 39 } 40 ////// 41 42 double sum = 0; 43 double ave; 44 45 for(int i=0 ; i < n; i++) { 46 sum += turtles[i].getY(); 47 } 48 49 ave = sum / n; 50 51 System.out.println("Y座標の合計:"+ sum); 52 System.out.println("Y座標の平均:"+ ave); 53 int idxMax = 0;//最大候補のインデックス 54 double maxBeta = 0;//最大候補の値 55 int idxMin = 0;//最小候補のインデックス 56 double minBeta = 350;//最小候補の値 57 //X, Y座標はどちらも 50.0以上350.0未満とする 58 for(int i = 0; i < n; i++) { 59 if(turtles[i].getX() >= maxBeta) { 60 maxBeta = turtles[i].getX();//最大値候補を更新 61 idxMax = i;//最大候補のインデックスを更新 62 System.out.println("maxBeta : "+ maxBeta +", idxMax : "+ idxMax); 63 } 64 if(turtles[i].getX() <= minBeta) { 65 minBeta = turtles[i].getX();//最小値候補を更新 66 idxMin = i;//最小候補のインデックスを更新 67 System.out.println("minBeta : "+ minBeta +", idxMin : "+ idxMin); 68 } 69 } 70 System.out.println("X座標のmax : "+ maxBeta +", min : "+ minBeta); 71 for(int i = 0; i < n; i ++) { 72 System.out.println(); 73 if(i % 2 == 0) { 74 System.out.println("偶数"); 75 System.out.println("i : "+i); 76 77 turtles[i].moveTo(maxBeta,ave); 78 79 System.out.println(i +"の x, y座標 = " + turtles[i].getX() + ", "+ turtles[i].getY()); 80 }else if(i % 2 != 0){ 81 System.out.println("奇数 : "); 82 System.out.println("i : " + i); 83 84 turtles[i].moveTo(minBeta, ave); 85 System.out.println(i + "の x, y座標 = " + turtles[i].getX() + ", "+ turtles[i].getY()); 86 } 87 } 88 } 89} 90
試したこと
メソッドを使用せず直接書き込んで作成した。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。