--/--/-- (--) スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 |


2011/07/04 (Mon) JAVA応用4日目 課題(TreeSetのソート)

課題:ツリーセットのソート

①キーボードでナンバー、ガソリン量、名前の付いた車を5台作らせる。
②ナンバー→ガソリン量→車種名の優先順位でソートし表示する。

※コードのコメント部(オレンジ)はコンパレータを実装したクラスを使ったソートコード。

実行結果(入力)

1台目
 ナンバー:1234
 ガソリン量:60
 名前:プリウス
2台目
 ナンバー:1234
 ガソリン量:60
 名前:ディアマンテ
3台目
 ナンバー:1234
 ガソリン量:80
 名前:フーガ
4台目
 ナンバー:1111
 ガソリン量:80
 名前:フェアレディ
5台目
 ナンバー:1111
 ガソリン量:55
 名前:シビック

実行結果(ソート)

num:1111 gas:80.0 name:フェアレディ
num:1111 gas:55.0 name:シビック
num:1234 gas:80.0 name:フーガ
num:1234 gas:60.0 name:ディアマンテ
num:1234 gas:60.0 name:プリウス

ソースコードは「続きを読む」から。




package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
//class Car {
class Car implements Comparable<Car> {
int num = 0;
double gas = 0.0;
String name = "";
Car(int n, double g, String na) {
this.num = n;
this.gas = g;
this.name = na;
}
public String toString() {
return "num:" + num + "  gas:" + gas + "  name:" + name;
}
// compareToメソッドをオーバーライド(実装したComparableインターフェイスから)
// 優先順位①ナンバー②ガソリン③名前の順でソートする
public int compareTo(Car c) {
// ここでのthisはツリーセットの中にある呼び出したオブジェクトに対するnum
// そしてc.numは引数で使ったオブジェクトに対するnum
// 例えば2台目のaddで2台目を引数にしてこのメソッドが呼び出され、
// ツリーセットに入っている1台目のnumと引数のnumを比較することになる。
int a = this.num;
int b = c.num;
double d = this.gas;
double e = c.gas;
String s = this.name;
String t = c.name;
if (a == b) {
if (d == e) {
if (s.compareTo(t) == 0) {
return 0;
} else if (s.compareTo(t) > 1) {
return 1;
} else {
return -1;
}
} else if (d < e) {
return 1;
} else {
return -1;
}
} else if (a > b) {
return 1;
} else {
return -1;
}
}
}
public class MainCar {
public static void main(String[] args) throws IOException {
TreeSet<Car> ts = new TreeSet<Car>();
// コンパレータで比較する場合
// TreeSet<Car> ts = new TreeSet<Car>(new MyCompare());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Car[] car = new Car[5];
for (int i = 0; i < 5; i++) {
System.out.println((i + 1) + "台目");
System.out.print("ナンバー:");
int t = Integer.valueOf(br.readLine());
System.out.print("ガソリン量:");
double d = Double.valueOf(br.readLine());
System.out.print("名前:");
String s = br.readLine();
car[i] = new Car(t, d, s);
// ツリーセットに追加。
// 2台目の追加からcompareTo()メソッドが呼び出される。
ts.add(car[i]);
}
Iterator<Car> it = ts.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
// class MyCompare implements Comparator<Car> {
// public int compare(Car c1, Car c2) {
//
// int a = c1.num;
// int b = c2.num;
// double d = c1.gas;
// double e = c2.gas;
// String s = c1.name;
// String t = c2.name;
//
// if (a == b) {
// if (d == e) {
// if (s.compareTo(t) == 0) {
// return 0;
// } else if (s.compareTo(t) > 1) {
// return 1;
// } else {
// return -1;
// }
// } else if (d < e) {
// return 1;
// } else {
// return -1;
// }
// } else if (a > b) {
// return 1;
// } else {
// return -1;
// }
// }
// }



プログラミング | trackback(0) | comment(0) |


<<JAVA応用5日目(Mapインターフェイス) | TOP | JAVA応用4日目(ソートとSetのまとめ)>>

comment











管理人のみ閲覧OK


trackback

trackback_url
http://kononushi.blog46.fc2.com/tb.php/524-04520a8c

| TOP |

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。