• 締切済み

以下の条件を満たすプログラムが分かりませんので質問させてください。

以下の条件を満たすプログラムが分かりませんので質問させてください。 exile.javaのプログラムを用いて、以下の設問に答えよ。 (A) メンバーの名前列(第0列)のアルファベット順に表を 並び替えるプログラム「Quiz10A.java」を作成せよ. (B) メンバーの生年月日の若い順に(若いメンバーほど前に なる順)に表を並び替えるプログラム「Quiz10B.java」を 作成せよ. (C)メンバー表の中から、実行時に入力した日付の日で30歳以上の メンバーだけを表示するプログラム「Otona.java」を作成せよ exile.javaは以下のプログラムです。 class EXILE { public static void main(String[] args){ String[][] member = { {"名前","年","月","日","血液型", "出身"}, {"HIRO", "1969", "6", "1", "AB", "神奈川"}, {"MATSU", "1975", "5", "27", "O", "神奈川"}, {"MAKIDAI", "1975", "10", "27", "O", "神奈川"}, {"USA", "1977", "2", "2", "AB", "神奈川"}, {"AKIRA", "1981", "8", "23", "A", "静岡"}, {"KENCHI", "1979", "9", "28", "O", "神奈川"}, {"KENJI", "1980", "1", "21", "B", "宮崎"}, {"TETSUYA", "1981", "2", "18", "O", "神奈川"}, {"NAOTO", "1983", "8", "30", "B", "埼玉"}, {"NAOKI", "1984", "11", "10", "O", "千葉"}, {"ATSUSHI", "1980", "4", "30", "A", "埼玉"}, {"TAKAHIRO", "1984", "12", "8", "O", "長崎"}, {"NESMITH", "1983", "8", "1", "O", "熊本"}, {"SHOKICHI", "1985", "10", "3", "A", "北海道"} }; int i,j; for(i=0; i<member.length; i++){ System.out.print(member[i][0]); for(j=1; j<member[i].length; j++){ System.out.print(", "+member[i][j]); } System.out.print("\n"); } } } 個人的なスケジュールの都合で緊急を要しています。どうか助けてください、お願いします。

みんなの回答

回答No.2

回答とは関係のない話ですが・・・ Otona.javaのisShowメソッド内の年齢計算は冗長な書き方をしていますが、これは以下の様に簡単に実装をする事が可能です。 指定日時点の年齢=(指定日8桁整数-生年月日8桁整数)/10000 入力の形式や文字列の数値変換等の考慮をする必要がありますし、今のままでも動く事は動くのですが、 余裕があれば実行時入力の実装のついでに、ご自分の手で仕上げをする意味で挑戦されてみてはいかがでしょうか。

syhnsaki
質問者

お礼

迅速な回答、ありがとうございました!本当に助かりました。 指定日時点での年齢の実装、そんな短くても構わないんですね。 時間を見つけて自身で実装してみます。 本当にありがとうございました。

すると、全ての回答が全文表示されます。
回答No.1

Quiz10A.java import java.util.*; public class Quiz10A { public static void main(String[] args) { String[][] member = { {"名前","年","月","日","血液型", "出身"}, {"HIRO", "1969", "6", "1", "AB", "神奈川"}, {"MATSU", "1975", "5", "27", "O", "神奈川"}, {"MAKIDAI", "1975", "10", "27", "O", "神奈川"}, {"USA", "1977", "2", "2", "AB", "神奈川"}, {"AKIRA", "1981", "8", "23", "A", "静岡"}, {"KENCHI", "1979", "9", "28", "O", "神奈川"}, {"KENJI", "1980", "1", "21", "B", "宮崎"}, {"TETSUYA", "1981", "2", "18", "O", "神奈川"}, {"NAOTO", "1983", "8", "30", "B", "埼玉"}, {"NAOKI", "1984", "11", "10", "O", "千葉"}, {"ATSUSHI", "1980", "4", "30", "A", "埼玉"}, {"TAKAHIRO", "1984", "12", "8", "O", "長崎"}, {"NESMITH", "1983", "8", "1", "O", "熊本"}, {"SHOKICHI", "1985", "10", "3", "A", "北海道"} }; Arrays.sort(member, new MemberNameComp()); int i,j; for(i=0; i<member.length; i++){ System.out.print(member[i][0]); for(j=1; j<member[i].length; j++){ System.out.print(", "+member[i][j]); } System.out.print("\n"); } } } class MemberNameComp implements Comparator<String[]> { public int compare(String[] a, String[] b) { if (a[0].equals("名前")) return -1; else if (b[0].equals("名前")) return 1; else return a[0].compareTo(b[0]); } } Quiz10B.java import java.util.*; public class Quiz10B { public static void main(String[] args) { String[][] member = { {"名前","年","月","日","血液型", "出身"}, {"HIRO", "1969", "6", "1", "AB", "神奈川"}, {"MATSU", "1975", "5", "27", "O", "神奈川"}, {"MAKIDAI", "1975", "10", "27", "O", "神奈川"}, {"USA", "1977", "2", "2", "AB", "神奈川"}, {"AKIRA", "1981", "8", "23", "A", "静岡"}, {"KENCHI", "1979", "9", "28", "O", "神奈川"}, {"KENJI", "1980", "1", "21", "B", "宮崎"}, {"TETSUYA", "1981", "2", "18", "O", "神奈川"}, {"NAOTO", "1983", "8", "30", "B", "埼玉"}, {"NAOKI", "1984", "11", "10", "O", "千葉"}, {"ATSUSHI", "1980", "4", "30", "A", "埼玉"}, {"TAKAHIRO", "1984", "12", "8", "O", "長崎"}, {"NESMITH", "1983", "8", "1", "O", "熊本"}, {"SHOKICHI", "1985", "10", "3", "A", "北海道"} }; Arrays.sort(member, new MemberBirthComp()); int i,j; for(i=0; i<member.length; i++){ System.out.print(member[i][0]); for(j=1; j<member[i].length; j++){ System.out.print(", "+member[i][j]); } System.out.print("\n"); } } } class MemberBirthComp implements Comparator<String[]> { public int compare(String[] a, String[] b) { if (a[1].equals("年")) return -1; else if (b[1].equals("年")) return 1; else return -String.format("%4s%2s%2s", a[1],a[2],a[3]).compareTo(String.format("%4s%2s%2s", b[1],b[2],b[3])); } } Otona.java import java.text.*; import java.util.*; public class Otona { public static void main(String[] args) { String[][] member = { {"名前","年","月","日","血液型", "出身"}, {"HIRO", "1969", "6", "1", "AB", "神奈川"}, {"MATSU", "1975", "5", "27", "O", "神奈川"}, {"MAKIDAI", "1975", "10", "27", "O", "神奈川"}, {"USA", "1977", "2", "2", "AB", "神奈川"}, {"AKIRA", "1981", "8", "23", "A", "静岡"}, {"KENCHI", "1979", "9", "28", "O", "神奈川"}, {"KENJI", "1980", "1", "21", "B", "宮崎"}, {"TETSUYA", "1981", "2", "18", "O", "神奈川"}, {"NAOTO", "1983", "8", "30", "B", "埼玉"}, {"NAOKI", "1984", "11", "10", "O", "千葉"}, {"ATSUSHI", "1980", "4", "30", "A", "埼玉"}, {"TAKAHIRO", "1984", "12", "8", "O", "長崎"}, {"NESMITH", "1983", "8", "1", "O", "熊本"}, {"SHOKICHI", "1985", "10", "3", "A", "北海道"} }; //指定日の入力(西暦で"年/月/日"形式で入力させてください) //仮指定日 String inputdt = "2010/2/7"; int i,j; for(i=0; i<member.length; i++){ if (isShow(member[i], inputdt)) { System.out.print(member[i][0]); for(j=1; j<member[i].length; j++){ System.out.print(", "+member[i][j]); } System.out.print("\n"); } } } static boolean isShow(String[] member, String inputdt) { //ヘッダーは無条件に出力 if (member[0].equals("名前")) return true; boolean ret = true; try { //年齢算出 Calendar input = Calendar.getInstance(); Calendar birth = Calendar.getInstance(); DateFormat df = DateFormat.getDateInstance(); input.setTime(df.parse(inputdt)); birth.setTime(df.parse(member[1] + "/" + member[2] + "/" + member[3])); //指定日 < 生年月日は除外 if (input.compareTo(birth) < 0) ret = false; int y = input.get(Calendar.YEAR) - birth.get(Calendar.YEAR); int m = input.get(Calendar.MONTH) - birth.get(Calendar.MONTH); int d = input.get(Calendar.DATE) - birth.get(Calendar.DATE); if (d < 0) m--; if (m < 0) y--; //30歳未満は除外 if (y < 30) ret = false; } catch (Exception e) { System.out.println(e); } return ret; } }

すると、全ての回答が全文表示されます。

関連するQ&A