質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2332閲覧

タートルグラフィックスで画像のような移動をさせたい

Alex_M

総合スコア32

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

1グッド

0クリップ

投稿2019/11/13 14:40

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

試したこと

メソッドを使用せず直接書き込んで作成した。

deliveryboy👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

alignX/Y は座標値を直接指定せず, Turtle で指定します. ですので, 別途 Turtle を生成して座標を設定し, 各Turtle の設定に使用しては如何でしょうか.

java

1 double sum = turtles[0].getY(); 2 Turtle max = turtles[0];//最大候補 3 Turtle min = turtles[0];//最小候補 4 for(int i = 1; i < n; i++) { 5 sum += turtles[i].getY(); 6 if(turtles[i].getX() > max.getX()) { 7 max = turtles[i];//最大値候補を更新 8 System.out.println("maxBeta : "+ max.getX() +", idxMax : "+ i); 9 } 10 if(turtles[i].getX() < min.getX()) { 11 min = turtles[i];//最小値候補を更新 12 System.out.println("minBeta : "+ min.getX() +", idxMin : "+ i); 13 } 14 } 15 Turtle ave = new Turtle(0,sum/n,0.0); // yのみ使用する 16 System.out.println("Y座標の合計:"+ sum); 17 System.out.println("Y座標の平均:"+ ave.getY()); 18 System.out.println("X座標のmax : "+ max.getX() +", min : "+ min.getX()); 19 20 for(int i = 0; i < n; i ++) { 21 System.out.println(); 22 if(i % 2 == 0) { 23 System.out.println("偶数"); 24 alignX(max, turtles[i]); 25 }else{ 26 System.out.println("奇数 : "); 27 alignX(min, turtles[i]); 28 } 29 alignY(ave, turtles[i]); 30 System.out.println("i : " + i); 31 System.out.println(i + "の x, y座標 = " + turtles[i].getX() + ", "+ turtles[i].getY()); 32 }

投稿2019/11/13 17:37

編集2019/11/13 18:15
jimbe

総合スコア12648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問