次のようなデータを最後の総計でソートしていましたが、それぞれの科目に注目してソートすることも簡単にできます。
n1001 65 67 56 70 42 300 n1002 35 39 38 32 34 178 n1003 55 80 40 72 59 306 n1004 52 86 61 75 61 335 n1005 63 72 65 53 59 312 n1006 44 50 52 50 47 243 n1007 45 57 59 45 35 241 ....
1科目目の点数の降順(大きい順)で並べ替えるクラス(コンパレーター)です。クラス名を別のものにすることで総計の並べ替えと併存させることができます。
class Ten1Comp implements Comparator<OokiiJun42>{ public int compare(OokiiJun42 x, OokiiJun42 y) { return y.ten1 - x.ten1; } }
2科目目で並べ替えるなら次のように書きます。
class Ten2Comp implements Comparator<OokiiJun42>{ public int compare(OokiiJun42 x, OokiiJun42 y) { return y.ten2 - x.ten2; } }
1科目目でソートしたければ、
Arrays.sort(jtable, 0, ct,new Ten1Comp());
2科目目でソートしたければ、
Arrays.sort(jtable, 0, ct,new Ten2Comp());
です。
n1084 82 78 80 82 80 402 n1076 81 65 76 54 71 347 n1301 81 86 92 92 78 429 n1387 80 73 56 71 53 333 n1927 80 87 100 72 77 416 n2001 79 88 84 87 78 416 n1188 76 67 68 55 52 318 n1798 76 73 72 76 62 359 n1614 75 78 72 71 67 363 n1782 75 65 83 78 64 365 n1939 27 14 33 35 29 138 n1728 27 50 44 36 19 176 n1680 25 28 38 28 30 149 n2080 25 19 41 48 28 161 n1921 25 31 56 36 30 178 n1352 24 51 56 49 42 222 n1819 23 37 36 17 18 131 n1380 23 27 33 28 24 135 n1808 17 24 29 21 18 109 n1260 15 30 40 24 26 135
まず、OokiiJun42をコピーしてOokiiJun43とし、プログラム中の OokiiJun42 をすべて OokiiJun43 にします。
上記を参考にしながら、ten1 でソートするようにしてできることを確認しなさい。
次のように加える部分の42も43にすることを忘れずに。
class Ten1Comp implements Comparator<OokiiJun43>{ public int compare(OokiiJun43 x, OokiiJun43 y) { return y.ten1 - x.ten1; } }
1.にさらに機能を加えます。
上記を参考にしながら、さらに、ten2, ten3, ten4, ten5 でソートするためのクラス(コンパレータ)も加えます。
コマンドラインから
java OokiiJun43 1
とすれば ten1 でソート
java OokiiJun43 2
とすれば ten2 でソート
などと 5科目のすべてでソートでき、
java OokiiJun43 s
とすれば soukei でソートするプログラムにしなさい。
注 1~5 は整数に変換する必要はなく、文字として if (args[0]=="1") などと比較すればよい。
Stringは単純変数でなくクラスの扱いなので if (args[0].equals("1")) などとしなければなりません。equalsを参照
あるいは、soukeiでソートする場合のsをやめて、これも 0 とか 6 とかにすれば、整数に直して比較できます。その場合は前にも出てきていますが、if (Integer.parseInt( args[0] == 1) とします。
s をやめるついでに、「引数無し」ならsoukeiでソートするというのもおもしろいかも知れません。if (args.length == 0 ) が引数がない時になります。