[宿題] by shinnou 2007/05/11 Person クラスは String 型の name 、int 型の age 、float 型の income のメンバをもつ。 プログラムの引数で与えた正の整数(100以上)の数だけ、 Person のインスタンスを作成し、それらを income の値で 大きい順にソートした結果を表示するプログラムを作成せよ。 name は適当にランダムに作成する。 age は 20 から 80 の間の整数をランダムに作成する。 income は 0 から 100 の間の float をランダムに作成する。 出力のイメージはだいたい以下の感じです。 ソートのアルゴリズムは何を使っても良いです。 > java ShinnouHW 1000 a12345 40 99.8 a34578 20 98.6 ... a88798 28 0.2 a55512 51 0.1 [解答例] public class Person { String name; int age; float income; Person(String name,int age,float income) { this.name = name; this.age = age; this.income = income; } } public class ShinnouHW { public static void main(String[] args) { int n = Integer.valueOf(args[0]).intValue( ); Person pdb[] = new Person[n]; Person tmp; // data generate for(int i = 0;i < n;i++) { String name = "a" + i; int age = (int) (60 * Math.random() + 20); float income = (float) (100 * Math.random()); pdb[i] = new Person(name,age,income); } // select sort for(int i = 0;i < n;i++) { float max = 0.0f; int maxid = 0; for(int j = i;j < n;j++){ if (pdb[j].income >= max) { max = pdb[j].income; maxid = j; } } tmp = pdb[i]; pdb[i] = pdb[maxid]; pdb[maxid] = tmp; } // output for(int i = 0;i < n;i++) { System.out.println(pdb[i].name + "\t" + pdb[i].age + "\t" + pdb[i].income); } } }