
Qiitaというサイトに
『作って覚えるプログラミング精選課題集(Java基礎編)』
という課題が記載してあるのですが、レベル1と2は何とか解けたのですが、レベル3と4が全く歯が立ちません。
以下にレベル3と4の問題を記載しておきます。
アドバイスいただきたいです、宜しくお願いいたします。
レベル3 干支の計算
西暦4桁から干支を算出するプログラムです。
ちょっと複雑なロジックに慣れることが目標です。
■メッセージの例
2017年の干支は丁酉(ひのととり)です。
想定所要時間:6時間
仕様
以下を参照する
http://hishoshou.blog108.fc2.com/blog-entry-6.html
条件分岐はCase文を使用すること
プログラム一覧
Kakezan.java
public static void main(String args[])
int型変数「seinen」フィールドに生年を保持する。
seinenを引数にしてjikkanを呼び出し、結果を二次元配列で受け取る
seinenを引数にしてjunishiを呼び出し、結果を二次元配列で受け取る
コンソールに出力する
private String[][] jikkan(int seinen)
十干を計算して二次元配列の形でreturnする
private String[][] junishi(int seinen)
十二支を計算して二次元配列の形でreturnする
ヒント
2次元配列を使って漢字と読み仮名の両方を保持する
十二支と十干はメソッドに入れても構いませんし、staticをつけてクラス変数化しても構いません。
レベル4 会員登録機能
クラスとインスタンス、JavaBeansの使い方に慣れることが目標です。
想定所要時間:6時間
仕様
3人分の会員情報を登録し、コンソールに以下のような文言を出力してください。
<例>
山田太郎さんの会員IDは0001です。登録:2017年4月1日
登録会員
①ID:0001 名前:山田太郎 登録日時:現在日時(yyyy/mm/dd)
②ID:0002 名前:鈴木花子 登録日時:現在日時(yyyy/mm/dd)
③ID:0003 名前:佐藤琢磨 登録日時:現在日時(yyyy/mm/dd)
出力はプログラムの最後にまとめて行ってください。
※データベースに登録するわけではないので「なんちゃって」会員登録です
プログラム一覧
すべてのjavaファイルはjp.co.kenshuパッケージ内に作成すること
Kaiin.java
int型「id」
String型「name」
Date型「addDate」
※それぞれgetter/setterを作成する
Register.java
public static void main(String args[])
ArrayListクラスを使ってKaiin型の動的配列「kaiinAll」を作成する。
kaiinAddメソッドを呼び出して結果をKaiinAllに追加する。※登録会員数分繰り返す
KaiinAllに入っているすべての会員情報をコンソールに出力する
private Kaiin kaiinAdd(int id,String name)
Kaiinクラスのインスタンスを作成する
引数を使ってIDと名前をsetする。登録日時はDate関数を使う
データをセットしたインスタンスをreturnする
ヒント
ポイントはKaiin型の動的配列を作るところです。
作ったデータがどこにいるのかをよく追いかけながら作成してみてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
レベル3 干支の計算
だけ実装してみました。
条件分岐はCase文を使用すること
に関しては使わなくても実装できるので、スルーしました。
無駄にクラス分けを行ったのでコードが長くなってしまいましたが、ご参考まで。
Java
1import java.util.Arrays; 2import java.util.Collections; 3import java.util.List; 4import java.util.Objects; 5import java.util.Scanner; 6 7public class A123212 { 8 private static final EtoCalendar etoCalendar = EtoCalendar.getInstance(); 9 private static final Scanner sc = new Scanner(System.in); 10 11 int seinen;// 変数名は原文ママ 12 13 A123212(int seinen) { 14 this.seinen = seinen; 15 } 16 17 public static void main(String[] args) throws NumberFormatException { 18 int year = get_input(); 19 A123212 prog = new A123212(year); 20 prog.displayAnswer(); 21 prog.displayAnswerTwo(); 22 } 23 24 private void displayAnswer() { 25 String[][] jikkan = this.jikkan(this.seinen); 26 String[][] junishi = this.junishi(this.seinen); 27 final String kanji = jikkan[0][0] + junishi[0][0]; 28 final String hiragana = jikkan[1][0] + junishi[1][0]; 29 System.out.println(String.format("%d年の干支は%s(%s)です。", this.seinen, kanji, hiragana)); 30 } 31 32 private void displayAnswerTwo() { 33 Eto eto = etoCalendar.getEto(this.seinen); 34 System.out.println(String.format("%d年の干支は%s(%s)です。", this.seinen, eto.getKanji(), eto.getHiragana())); 35 } 36 37 public static int get_input() throws NumberFormatException { 38 return Integer.parseInt(sc.nextLine()); 39 } 40 41 // メソッド名、引数、戻り値は原文ママ 42 private String[][] jikkan(int seinen) { 43 CelestialStem stem = etoCalendar.getJikkan(seinen); 44 return new String[][] { { stem.getKanji() }, { stem.getHiragana() } }; 45 } 46 47 // メソッド名、引数、戻り値は原文ママ 48 private String[][] junishi(int seinen) { 49 EarthlyBranches stem = etoCalendar.getJunishi(seinen); 50 return new String[][] { { stem.getKanji() }, { stem.getHiragana() } }; 51 } 52} 53 54interface Readings { 55 String getKanji(); 56 57 String getHiragana(); 58} 59 60enum CelestialStem implements Readings { 61 ONE("甲", "きのえ"), TWO("乙", "きのと"), THREE("丙", "ひのえ"), FOUR("丁", "ひのと"), FIVE("戊", "つちのえ"), SIX("己", 62 "つちのと"), SEVEN("庚", "かのえ"), EIGHT("辛", "かのと"), NINE("壬", "みずのえ"), TEN("癸", "みずのと"); 63 CelestialStem(String kanji, String hiragana) { 64 this.kanji = kanji; 65 this.hiragana = hiragana; 66 } 67 68 private final String kanji; 69 private final String hiragana; 70 71 @Override 72 public String getKanji() { 73 return this.kanji; 74 } 75 76 @Override 77 public String getHiragana() { 78 return this.hiragana; 79 } 80 81 @Override 82 public String toString() { 83 return this.name(); 84 } 85} 86 87enum EarthlyBranches implements Readings { 88 ONE("子", "ね"), TWO("丑", "うし"), THREE("寅", "とら"), FOUR("卯", "う"), FIVE("辰", "たつ"), SIX("巳", "み"), SEVEN("午", 89 "うま"), EIGHT("未", "ひつじ"), NINE("申", "さる"), TEN("酉", "とり"), ELEVEN("戌", "いぬ"), TWELVE("亥", "い"); 90 EarthlyBranches(String kanji, String hiragana) { 91 this.kanji = kanji; 92 this.hiragana = hiragana; 93 } 94 95 private final String kanji; 96 private final String hiragana; 97 98 @Override 99 public String getKanji() { 100 return this.kanji; 101 } 102 103 @Override 104 public String getHiragana() { 105 return this.hiragana; 106 } 107 108 @Override 109 public String toString() { 110 return this.name(); 111 } 112} 113 114class Eto implements Readings { 115 private final String kanji; 116 private final String hiragana; 117 118 public Eto(String kanji, String hiragana) { 119 this.kanji = Objects.requireNonNull(kanji); 120 this.hiragana = Objects.requireNonNull(hiragana); 121 } 122 123 public Eto(CelestialStem stem, EarthlyBranches animal) { 124 this(stem.getKanji() + animal.getKanji(), stem.getHiragana() + animal.getHiragana()); 125 } 126 127 @Override 128 public String getKanji() { 129 return this.kanji; 130 } 131 132 @Override 133 public String getHiragana() { 134 return this.hiragana; 135 } 136 137 @Override 138 public String toString() { 139 return String.join("-", this.kanji, this.hiragana); 140 } 141} 142 143final class EtoCalendar { 144 private static final EtoCalendar instance = new EtoCalendar(); 145 private static final List<CelestialStem> stems = Collections 146 .unmodifiableList(Arrays.asList(CelestialStem.values())); 147 private static final List<EarthlyBranches> animals = Collections 148 .unmodifiableList(Arrays.asList(EarthlyBranches.values())); 149 150 private EtoCalendar() { 151 ; 152 } 153 154 public static EtoCalendar getInstance() { 155 return instance; 156 } 157 158 public Eto getEto(int year) { 159 return new Eto(getJikkan(year), getJunishi(year)); 160 } 161 162 public CelestialStem getJikkan(int year) { 163 int index = (year + 6) % stems.size(); 164 return stems.get(index); 165 } 166 167 public EarthlyBranches getJunishi(int year) { 168 int index = (year + 8) % animals.size(); 169 return animals.get(index); 170 } 171}
投稿2018/05/03 19:22
総合スコア5846
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
- 組み合わせなので六十花甲子の計算のほうがいいとおもう題名ですが
取得するのは [[甲,きのえ],[子,ね]] のようになると思いますが、
get十二支(int since)
で String[][] を返す必要性が感じられません。
また 4時間なのか6時間なのかちぐはぐですね
[[甲],[きのえ]] で返させるなんて間抜けですか?
投稿2018/04/23 13:40

退会済みユーザー
総合スコア0
0
ベストアンサー
<第3問>
Java
1import java.util.Scanner; 2 3public class Main { 4 public static void main(String[] args) { 5 6 Scanner sc = new Scanner(System.in); 7 int year = sc.nextInt(); 8 String jikkan = jikkan(year); 9 String juunisi = juunisi(year); 10 11 System.out.println(year + "年の干支は" + jikkan + juunisi + "です。"); 12 } 13 14 public static String jikkan(int n){ 15 String []jikkan = {"甲","乙","丙","丁","戊","己","庚 ","辛"," 壬 "," 癸"}; 16 n = (n + 6) % 10; 17 18 return jikkan[n]; 19 } 20 21 public static String juunisi(int n){ 22 String []juunisi = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"}; 23 n = (n + 8) % 12; 24 return juunisi[n]; 25 } 26}
<第4問>
第4問は(ヒントとして、)データが入力ではない状態で書きました。
Java
1 2import java.util.ArrayList; 3import java.sql.Date; 4 5public class Main { 6 public static void main(String[] args) { 7 8 9 ArrayList<Member>person = new ArrayList<>(); 10 11 person.add(new Member("0001","山田太郎",Date.valueOf("2018-04-23"))); 12 person.add(new Member("0002","鈴木花子",Date.valueOf("2018-04-23"))); 13 person.add(new Member("0003","佐藤琢磨",Date.valueOf("2018-04-23"))); 14 15 for(Member member : person){ 16 member.Show_profile(); 17 } 18 } 19} 20 21class Member{ 22 private String my_Id; 23 private String my_Name; 24 private Date add_Date; 25 26 public Member(String id, String name, Date date){ 27 my_Id = id; 28 my_Name = name; 29 add_Date = date; 30 } 31 public void Show_profile(){ 32 System.out.println("ID:" + my_Id + "名前:" + my_Name + "現在時刻:" + add_Date); 33 } 34}
Java
1import java.util.Scanner; 2import java.util.ArrayList; 3import java.util.Calendar; 4import java.util.Date; 5import java.text.SimpleDateFormat; 6 7public class Main{ 8 public static void main(String[] args) { 9 Scanner sc = new Scanner(System.in); 10 Calendar calendar = Calendar.getInstance(); 11 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 12 Date d1 = calendar.getTime(); 13 14 ArrayList<Member>person = new ArrayList<>(); 15 System.out.println("IDと名前を入力"); 16 for(int i = 1; i <= 3 ;i++){ 17 System.out.println(i + "人目"); 18 String id,name,date1; 19 System.out.print("ID:"); 20 id = sc.nextLine(); 21 System.out.print("名前:"); 22 name = sc.nextLine(); 23 date1 = sdf.format(d1); 24 25 person.add(new Member(id,name,date1)); 26 } 27 for(Member member : person){ 28 member.Show_profile(); 29 } 30 } 31} 32 33class Member{ 34 private String my_Id; 35 private String my_Name; 36 private String add_Date; 37 38 public Member(String id, String name, String date){ 39 my_Id = id; 40 my_Name = name; 41 add_Date = date; 42 } 43 public void Show_profile(){ 44 System.out.println("ID:" + my_Id + "名前: " + my_Name + "現在時刻:" + add_Date); 45 } 46}
<追記>
Java
1import java.util.Scanner; 2 3public class Main { 4 public static void main(String[] args){ 5 6 Scanner sc = new Scanner(System.in); 7 int year = sc.nextInt(); 8 String answer = jikkan(0,year) + juunisi(0,year) + "(" + jikkan(1,year) + juunisi(1,year) + ")"; 9 System.out.println(year + "年は" + answer + "です。"); 10 11 12 } 13 public static String jikkan(int num, int year){ 14 String[][] jikkan = {{"庚","辛","壬","癸","甲","乙","丙","丁","戊","己"},{"かのえ","かのと","みずのへ","みずのと","きのえ","きのと","ひのえ","ひのと","つちのえ","つちのと"}}; 15 year = year % 10; 16 17 String answer = jikkan[num % 2][year]; 18 19 return answer; 20 } 21 22 public static String juunisi(int num, int year){ 23 String[][] juuni = {{"申","酉","戌","亥","子","丑","寅","卯","辰","巳","午","未"},{"さる","とり","いぬ","い","ね","うし","とら","う","たつ","み","うま","ひつじ"}}; 24 25 year = year % 12; 26 27 String answer = juuni[num % 2][year]; 28 29 return answer; 30 } 31}
<追記>classで書きました。
Java
1import java.util.Scanner; 2 3public class Main { 4 public static void main(String[] args){ 5 6 Scanner sc = new Scanner(System.in); 7 int year = sc.nextInt(); 8 Kanshi kanshi = new Kanshi(); 9 Kanshi jikkan = kanshi.Jikkan(year); 10 Kanshi juuni = kanshi.Juuni(year); 11 String answer = jikkan.kanji + juuni.kanji + "(" + jikkan.hiragana + juuni.hiragana + ")"; 12 System.out.println(year + "年は" + answer + "です。"); 13 } 14} 15 16class Kanshi{ 17 18 String kanji; 19 String hiragana; 20 21 public Kanshi Jikkan(int year){ 22 23 String[][] jikkan_type = {{"庚","辛","壬","癸","甲","乙","丙","丁","戊","己"},{"かのえ","かのと","みずのへ","みずのと","きのえ","きのと","ひのえ","ひのと","つちのえ","つちのと"}}; 24 Kanshi jikkan = new Kanshi(); 25 jikkan.kanji = jikkan_type[0][year % 10]; 26 jikkan.hiragana = jikkan_type[1][year % 10]; 27 return jikkan; 28 } 29 30 public Kanshi Juuni(int year){ 31 32 String[][] juuni_type = {{"申","酉","戌","亥","子","丑","寅","卯","辰","巳","午","未"},{"さる","とり","いぬ","い","ね","うし","とら","う","たつ","み","うま","ひつじ"}}; 33 Kanshi juuni = new Kanshi(); 34 juuni.kanji = juuni_type[0][year % 12]; 35 juuni.hiragana = juuni_type[1][year % 12]; 36 return juuni; 37 } 38}
投稿2018/04/23 13:38
編集2018/05/03 13:21
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2018/04/23 22:36

退会済みユーザー
2018/04/25 13:16

退会済みユーザー
2018/04/25 14:19

退会済みユーザー
2018/04/26 03:24

退会済みユーザー
2018/04/26 03:26

退会済みユーザー
2018/04/26 03:26

退会済みユーザー
2018/04/26 03:28

退会済みユーザー
2018/04/26 12:54

退会済みユーザー
2018/04/26 13:06 編集

退会済みユーザー
2018/04/26 12:58
2018/04/26 12:58

退会済みユーザー
2018/04/26 13:05 編集

退会済みユーザー
2018/04/29 07:12

退会済みユーザー
2018/04/29 07:13 編集

退会済みユーザー
2018/04/30 03:37 編集

退会済みユーザー
2018/05/03 10:27 編集

退会済みユーザー
2018/05/03 10:13

退会済みユーザー
2018/05/03 10:18

退会済みユーザー
2018/05/03 13:20 編集

退会済みユーザー
2018/05/03 11:59 編集

退会済みユーザー
2018/05/03 12:24

退会済みユーザー
2018/05/03 12:25
2018/05/03 13:06

退会済みユーザー
2018/05/03 13:22
2018/05/03 13:35

退会済みユーザー
2018/05/03 14:03

退会済みユーザー
2018/05/04 07:32

0
自分で勉強するための問題ですから、丸投げせずにもうちょい自分であがいてみましょうよ
具体的になにがわからないのでしょうか
投稿2018/04/23 12:44
総合スコア88163
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
少なくとも干支に関しては参照リンク先の説明をそのまま実践すればいいだけですよ?
まさか「割ったあまり」が計算できないとかですか?
投稿2018/04/23 13:04
総合スコア20675
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。