亀を移動させ、終了命令と共に総移動距離と平均移動距離を出力したい
タートルグラフィックスの亀を動かし回転させ、終了とともに総移動距離と平均移動距離を出力したいです。
命令は2つあります
命令1(op1):quit, go, rotate の3つです
命令2(op2):taro(亀t1), hanako(亀t2) の2つです
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
1.命令1でquitと入力した場合:それまでのそれぞれの亀の総移動距離と平均移動距離を出力する
2.命令1でgoと入力した場合:
①続けて命令2でtaroと入力した場合→taroは乱数m1(10.0以上50.0未満)で前に進み、インスタンスの位置と向きの角度を出力する
②続けて命令2でhanakoと入力した場合→hanakoは乱数m2(10.0以上50.0未満)で前に進み、インスタンスの位置と向きの角度を出力する
3.命令1でrotateと入力した場合:
①続けて命令2でtaroと入力した場合→taroは乱数k(0.0以上180.0未満)で右に回転し、インスタンスの位置と向きの角度を出力する
②続けて命令2でhanakoと入力した場合→hanakoは乱数k(0.0以上180.0未満)で右に回転し、インスタンスの位置と向きの角度を出力する
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
という内容のプログラムを組みたいです
しかし、私の書いたプログラムでは、以下の問題が生じてしまいます
・go ~ で前に進む距離が毎回変化せず、一回目の乱数のみで固定されてしまう
・rotate ~ と入力すると
【Exception in thread "main" java.lang.NullPointerException
at homework06_02.main(homework06_02.java:48)】
と表示されてしまう
(上記の問題が解決できないため、総移動距離や平均移動距離を出力するプログラムはまだ書いていません)
発生している問題・エラーメッセージ
Exception in thread "main" java.lang.NullPointerException at homework06_02.main(homework06_02.java:48)
該当のソースコード
Java
1import java.util.Scanner; 2 3import javafx.scene.paint.Color; 4import tg.Turtle; 5import tg.TurtleFrame; 6 7public class homework06_02 { 8 9 public static void main(String[] args) { 10 // TODO 自動生成されたメソッド・スタブ 11 Scanner sc = new Scanner(System.in); 12 TurtleFrame f = new TurtleFrame(); 13 Turtle t1 = new Turtle(150, 200, 180); //taro 14 Turtle t2 = new Turtle(250, 200, 0); //hanako 15 f.add(t1); f.add(t2); 16 17 t1.setTColor(Color.BLUE); 18 t2.setTColor(Color.RED); 19 20 double m = 10.0 + Math.random() * 40.0; 21 double m1, m2, sum1 = 0, sum2 = 0; 22 double k = Math.random() * 180.0; 23 24 while(true) { 25 String op1, op2; 26 op1 = sc.next(); 27 if (op1.equals("quit")) { 28 System.out.println("終了します"); 29 System.out.println("taroの総移動距離=" + sum1); 30 System.out.println("hanakoの総移動距離=" + sum2); 31 break; 32 33 } else if(op1.equals("go")) { 34 op2 = sc.next(); 35 if(op2.equals("taro")) { 36 t1.fd(m); 37 m1 = m; 38 sum1 = sum1 + m1; 39 System.out.println("taroは" + m1 + "移動して(150.0, " + sum1 + ")にいます"); 40 } else if(op2.equals("hanako")) { 41 t2.fd(m); 42 m2 = m; 43 sum2 = sum2 + m2; 44 System.out.println("hanakoは" + m2 + "移動して(250.0, " + sum2 + ")にいます"); 45 } 46 47 } else if(op1.equals("rotate")) { 48 if(op2.equals("taro")) { 49 t1.rt(k); 50 System.out.println("taroは(150.0, "+ sum1 + ")で" + t1.getAngle() + "を向きました"); 51 }else if(op2.equals("hanako")) { 52 t2.rt(k); 53 System.out.println("hanakoは(250.0, " + sum2 + ")で" + t2.getAngle() + "を向きました"); 54 } 55 } 56 }sc.close(); 57 } 58}
試したこと
・if文に不備がないか紙に書き出し、一度中身を削除して範囲を見直し書き直した
###最後に
長々と分かりづらい説明でも仕分けございません。
コメントをいただければ分かる限りお答えしたいと思います。
当方かなりの初心者で、調べようにもどう調べたら良いか分からず最終手段として質問させていただきました。どうかよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/10/22 15:56
退会済みユーザー
2019/10/22 15:59
2019/10/22 22:47
2019/10/23 03:54
2019/10/23 03:58
退会済みユーザー
2019/10/23 15:41