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

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

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

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

Q&A

1回答

2079閲覧

comparatorを使用したタートルの並べ替え

NASKA--

総合スコア21

Java

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

0グッド

0クリップ

投稿2021/06/02 02:49

解答例がなかったので、大学のテストの過去問についての質問

前提・実現したいこと

乱数を用いて 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

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

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

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

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

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

guest

回答1

0

plain

1Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 2 at prog2.Ex72.main(Ex72.java:29)

これはこのファイルの29行目で例外が発生したことを表します。
29行目はこの行です。

java

1 out:for(int i=0;i<=tokens[i].length();i++) {

これでは、「配列のインデックス」を、「配列内の文字列の長さ」と比較するという意味不明なことを行っていることになります。おそらく正しくはこうなるでしょう。

java

1 out:for(int i=0;i<tokens.length;i++) {

本題。

1 タートルインスタンスの X 座標の小さい順に並び替える

例えば、こうなります。

java

1list.sort((t1, t2) -> Double.compare(t1.getX(), t2.getX());

投稿2021/06/02 04:45

swordone

総合スコア20669

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問