解答例がなかったので、大学のテストの過去問についての質問
前提・実現したいこと
乱数を用いて 20 個の Turtle インスタンスを ArrayList に追加する。
その後、キーボードから整数を受け付け、整数に対応した並べ替えを実行し、その後、forEach メソッドを用いて、すべてのタートルを「30.0 度右回転した後、50.0 前進する」。0 が入力されるまで、このことを繰り返す。
0 プログラムを終了する
1 タートルインスタンスの X 座標の小さい順に並び替える
2 タートルインスタンスの X 座標の大きい順に並び替える
3 タートルインスタンスの Y 座標の小さい順に並び替える
4 タートルインスタンスの Y 座標の大きい順に並び替える
5 タートルインスタンスの向きの角度の小さい順に並び替える
6 タートルインスタンスの向きの角度の大きい順に並び替える
7 タートルインスタンスの大きさの小さい順に並び替える
8 タートルインスタンスの大きさの大きい順に並び替える
並べ替えのためにはComparatorを使用する。
###発生している問題
並べ替えの命令の出し方をどのようにすればいいのかわからなかったので1の命令だけ教えていただきたいです。そこから下は自分でやってみます。
あとおそらく配列外参照?のエラーが出るのですがこれの回避法がわかりません
###エラーメッセージ
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at prog2.Ex72.main(Ex72.java:29)
該当のソースコード
java
1package p; 2import tg.*; 3import java.util.*; 4public class Ex72 { 5 static double getRandomDouble(double low, double high) { 6 double ans = 0.0; 7 double r = Math.random(); 8 ans = low + r * (high-low); 9 return ans; 10 } 11 public static void main(String[] args) { 12 ArrayList<Turtle>list=new ArrayList<Turtle>(); 13 TurtleFrame f=new TurtleFrame(); 14 Scanner sc=new Scanner(System.in); 15 String line=sc.nextLine(); 16 String tokens[]; 17 tokens=line.split("[ ]+"); 18 int n=20; 19 for(int i=0;i<n;i++) { 20 double x=getRandomDouble(50.0,350.0); 21 double y=getRandomDouble(50.0,350.0); 22 double ang=getRandomDouble(0.0,360.0); 23 Turtle t=new Turtle(x,y,ang); 24 f.add(t); 25 double d=getRandomDouble(0.5,1.5); 26 t.setTScale(d); 27 list.add(t); 28 } 29 out:for(int i=0;i<=tokens[i].length();i++) { 30 int c=Integer.parseInt(tokens[i]); 31 switch(c) { 32 case 0: 33 System.out.println("プログラムを終了します"); 34 break out; 35 case 1: 36 list.forEach(turtle->{ 37 turtle.rt(30.0); 38 turtle.fd(50.0); 39 }); 40 break; 41 case 2: 42 list.forEach(turtle->{ 43 turtle.rt(30.0); 44 turtle.fd(50.0); 45 }); 46 break; 47 case 3: 48 list.forEach(turtle->{ 49 turtle.rt(30.0); 50 turtle.fd(50.0); 51 }); 52 case 4: 53 list.forEach(turtle->{ 54 turtle.rt(30.0); 55 turtle.fd(50.0); 56 }); 57 case 5: 58 list.forEach(turtle->{ 59 turtle.rt(30.0); 60 turtle.fd(50.0); 61 }); 62 case 6: 63 list.forEach(turtle->{ 64 turtle.rt(30.0); 65 turtle.fd(50.0); 66 }); 67 case 7: 68 list.forEach(turtle->{ 69 turtle.rt(30.0); 70 turtle.fd(50.0); 71 }); 72 case 8: 73 list.forEach(turtle->{ 74 turtle.rt(30.0); 75 turtle.fd(50.0); 76 }); 77 } 78 } 79 } 80}
試したこと
forEachの前にlist.sort((turtle.getX(),turtle.getY())-> -Double.compare())
を入れようとしたが、どのようにラムダ式を記述すれば良いかわからなかったため、わからなかった
補足情報(FW/ツールのバージョンなど)
ツール:Eclipse_2020-09
教科書:https://www.i.h.kyoto-u.ac.jp/users/tsuiki/javaEveryone3/index.html