質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

5回答

7517閲覧

作って覚えるプログラミング精選課題集(Java基礎編)の課題が解けません

ASHN

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/04/23 12:38

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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/23 13:57

ネタではあるが 九九はの勉強は普通はこっちだな https://ideone.com/Epe7la
ASHN

2018/04/23 14:23

自分が書いたソースの上位版って感じがしますね!「throws java.lang.Exception」これはどんな動作をしているのでしょうか
退会済みユーザー

退会済みユーザー

2018/04/23 14:27

たいしていみがない。消すのが面倒だっただけ(ideone の初期テンプレート)
ASHN

2018/04/23 14:55

なるほど!上のimportも初期テンプレートですかね?使い方がわかりませんが…
guest

回答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

umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ASHN

2018/05/04 08:11

要求を忠実に再現いただきありがとうございます。 見たことない文字ばかりでうおってなってますが今Ecripseに移して動きを確認しているところです。 オーバーライドに関してまだ無知なのですが勉強させていただきます。 出力が2つあるのは2種類の出力方法を記載していただいているという認識でよろしいでしょうか。 全く違う書き方をしているのに同じ結果がきちんと出力されていて感動です。 1つ1つの動きを確認して勉強させていただきます。
umyu

2018/05/04 11:41

>ASHNさんへ 2種類の出力方法を記載→はい。displayAnswerとdisplayAnswerTwoです。
ASHN

2018/05/05 11:45

全く違う書き方をしているのに全く同じ答えを出力で来ていてすごいですね 状況に応じてどっちを使うとか出てくることがありそうなのでいろんなパターンを覚えて知識を広げていきたいです。 // メソッド名、引数、戻り値は原文ママ ここのアクセス修飾子がprivateとなっているところはJavaBeansの原理を利用しているのでしょうか? (getとset)
umyu

2018/05/05 11:51 編集

>ASHNさんへ JavaBeansとか関係なく普通のJava言語の書き方ですが。何を聞きたかったのでしょうか?上のコメントの話でしょうか? この質問を外部サイト(google)などから検索して後から見た人のためにコメントを付けているだけですが。
guest

0

  • 組み合わせなので六十花甲子の計算のほうがいいとおもう題名ですが
    取得するのは [[甲,きのえ],[子,ね]] のようになると思いますが、

get十二支(int since) で String[][] を返す必要性が感じられません。
また 4時間なのか6時間なのかちぐはぐですね

[[甲],[きのえ]] で返させるなんて間抜けですか?

投稿2018/04/23 13:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ASHN

2018/04/23 14:21

>asahina1979さん お返事ありがとうございます。 六十花甲子という言葉初めて聞きました・・・非常識ですいません。。。 配列も全然知識がないのでわけがわかりません、、、難しいですね
guest

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ASHN

2018/04/23 14:16

>Stars1024さん お返事ありがとうございます!こんなにすぐ書けるなんてすごいですね!尊敬します。 そしてアドバイスありがとうございます。非常に参考になります。 質問なのですが、一番上のimportはどのような意味があるのでしょうか
退会済みユーザー

退会済みユーザー

2018/04/23 22:36

import とは、特定のパッケージに含まれるクラスをインポートする際に使用される Java の キーワード の一つです。 import パッケージ名.クラス名; のように使います。試しに、このimportの部分を消すとエラーが出ると思います。
ASHN

2018/04/25 12:26

なるほど、勉強になります。 教えていただいた問題3のソースを実行しようとしたところ 「リソース・リーク:'sc'閉じられることはありません」 と表示されました。調べたところclose?しなくてはいけないみたいなのですが、どのあたりに入れるのが正しいでしょうか?
退会済みユーザー

退会済みユーザー

2018/04/25 13:16

sc.close();を int year = sc.nextInt(); の次の行に挿入すればいいと思います。
ASHN

2018/04/25 13:50

エラーが消えました!ありがとうございます。 たびたび初歩的な質問で申し訳ございません、さっそく自分のEclipceで実行できるように部分的に書き換えて実行したのですが、既に実行中と表示され何も画面上には表示されません。何か問題があるのでしょうか。 (九九の計算の方は実行したらコンソールに出力されます。) package eto; import java.util.Scanner; public class Eto { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int year = sc.nextInt(); sc.close(); String jikkan = jikkan(year); String juunisi = juunisi(year); System.out.println(year + "年の干支は" + jikkan + juunisi + "です。"); } public static String jikkan(int n){ String []jikkan = {"甲","乙","丙","丁","戊","己","庚 ","辛"," 壬 "," 癸"}; n = (n + 6) % 10; return jikkan[n]; } public static String juunisi(int n){ String []juunisi = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"}; n = (n + 8) % 12; return juunisi[n]; } }
ASHN

2018/04/25 14:08

すいません!表示されました! 1度整理してから次は問題4に進もうと思います。 ちなみになのですが、importを使わない記述となると複雑になりますか? (importをまだ使用したことがなく、教えていただいたものを参考にこれから覚えよう思うのですが)
退会済みユーザー

退会済みユーザー

2018/04/25 14:19

import文は「パッケージ込みの長ったらしいクラス名を省略して書けるようにするためのもの」 なので、使用しない場合 完全限定名で指定する必要があるため、多少コードが長くなります。
ASHN

2018/04/25 14:34

import文が主流といいますか、こちらを使うのが短くすっきりと書けるというわけですね。 ちなみにどのように違うのか比較を見てみたいのでもし時間がありましたら参考程度にどのような書き方をするのか教えていただきたいです。お忙しいようでしたら構いません!
退会済みユーザー

退会済みユーザー

2018/04/26 03:24

回答欄にところに例を載せました。図のようにすべて正式名称で書かなければいけないので importを使うことをおすすめします。
退会済みユーザー

退会済みユーザー

2018/04/26 03:26

現在のJavaでは最初より色んなパッケージが追加され 多くの機能をimportできます。 例えば、大きな数字を出力するBigInteger, doubleより正確な小数を出力してくれる BigDecimalなどです。
退会済みユーザー

退会済みユーザー

2018/04/26 03:26

他にもたくさんあるので、必要に応じてそのとき、覚えればいいと思います。
退会済みユーザー

退会済みユーザー

2018/04/26 03:28

余談ですが、BigIntegerを使うと100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 をあっという間に出力してくれます。(いつ使うんだ?という話ですが...)
ASHN

2018/04/26 12:39

これは便利ですね!すっきりしてて見やすいですし。 とりあえず一番使いそうなjava.io.*は頭に入れておきます! C言語で言うstdio.hとかmath.hとかと似てる?認識でいいんですかね(違ってたらすいません;; 例の通りに入力してみたのですが、 String s = r.readLine(); ここでrを解決できませんと表示されています。 このrはどこのものでしょうか?変数?いろいろいじってみたけど解決できません・・・
退会済みユーザー

退会済みユーザー

2018/04/26 12:54

C言語で言うstdio.hとかmath.hとかと似てる?認識でいいんですかね >厳密に、同じものかどうかはわかりませんが、役割は似てますね。
退会済みユーザー

退会済みユーザー

2018/04/26 13:06 編集

rは BufferedReader r = new BufferedReader(new InputStreamReader(System.in),1); に書いてあるrで入力された文字列を受け取るためのものです。(最後の1は書かなくても正常に動きます。) 書くものが長いので綴りミスには気を付けてください。特に大文字小文字に注意してください。 私は、最初いろいろスペルミスしてエラーが出ました。 参考のサイト http://www.kusa.ac.jp/~kajiura/java/console/console3.htm
退会済みユーザー

退会済みユーザー

2018/04/26 12:58

回答の入力にはScannerを使ったのに今回例に出した入力方法はまた違う方法だったので 混乱させたのならすみません。(いろいろ調べて引っ張ってきたので)
ASHN

2018/04/26 13:17

すみません、BufferedReader r =の1行が抜けていました・・・よく見るように気を付けます 次に問4に移ろうと思います。 person.add(new Member("0001","山田太郎",Date.valueOf("2018-04-23"))); person.add(new Member("0002","鈴木花子",Date.valueOf("2018-04-23"))); person.add(new Member("0003","佐藤琢磨",Date.valueOf("2018-04-23"))); イメージ的にはこの3人に該当する部分をScanner文で入力させて出力させるイメージですよね? 文法があやふやなのでちゃんと書ける自信が全くないですがやってみます。
ASHN

2018/04/28 10:18

優しいjavaという本を読みながらクラス、メソッドの基本から読んで動きを理解しようとしながら再チャレンジしようとしましたがダメでした・・・助けてください アドバイスいただいた mport java.util.ArrayList; import java.sql.Date; public class Main { public static void main(String[] args) { ArrayList<Member>person = new ArrayList<>(); person.add(new Member("0001","山田太郎",Date.valueOf("2018-04-23"))); person.add(new Member("0002","鈴木花子",Date.valueOf("2018-04-23"))); person.add(new Member("0003","佐藤琢磨",Date.valueOf("2018-04-23"))); for(Member member : person){ member.Show_profile(); } } } class Member{ private String my_Id; private String my_Name; private Date add_Date; public Member(String id, String name, Date date){ my_Id = id; my_Name = name; add_Date = date; } public void Show_profile(){ System.out.println("ID:" + my_Id + "名前:" + my_Name + "現在時刻:" + add_Date); } } こちらでお聞きしたいです。 イメージ的には会員ID、名前、登録日時をスキャナー文で入力して(現在時刻は現在時刻を表示させる方法があるのですか?)を例題で言うkaiinALLいったん追加しておき、3人分の入力が終わったらそれを出力するというイメージなのですが、これを実装するとなると思考が止まってしまいます。 どのような書き方をしたらよろしいでしょうか。アドバイスいただきたいです。
ASHN

2018/04/28 12:30

質問中にすいません。 私情で申し訳ないのですが、急ぎでヒントをいただきたく、Stars1024さんからいただいたヒントを元に全体で質問させていただきます。 宜しくお願いします。
退会済みユーザー

退会済みユーザー

2018/04/29 07:12

id,名前をそれぞれ入力する形で書いてそれを、for文で3回ループさせればいいです。 あまり、難しく考えなくていいですよ。 以下のサイトを参考に 【Java入門】Date型で現在の日時を取得して加算する方法(add) https://www.sejuku.net/blog/21253
退会済みユーザー

退会済みユーザー

2018/04/29 07:13 編集

新しいソースコードを載せました。
ASHN

2018/04/29 15:03

ありがとうございます。Stars1024さんには凄く助けていただき感謝しきれません。 3人分まとめてではなく1人ずつ追加して表示という考えで考えた方がよかったですね 3人表示というところに目が行き過ぎて混乱していました。 今度から図に書いてやりたいことを整理して1つ1つ整理してから挑もうと思います。 日時の加算や減算もできるのですね。 せっかくのお休みなので今まで教わったこと含めData型とCalender型についてもじっくり学習させていただきます。
退会済みユーザー

退会済みユーザー

2018/04/30 03:37 編集

>今度から図に書いてやりたいことを整理して1つ1つ整理してから挑もうと思います。 私もやるべきことを整理するとき図に書いてやります。またどのプログラミング言語にも "コメント"機能があるのでそこに今処理していることを書いて整理するのもいいでしょう.
ASHN

2018/04/30 09:21

頭の中でイメージしているだけじゃいざ書き出しても何がしたいのかわからなくなりますしね。 教わったことの応用で前提条件など1度まとめながら少し機能を拡張してみました。 少し加えて上手く実行できて、納得しながら進められて楽しいですね。(教わった元ソースがあるおかげですが笑)
ASHN

2018/05/03 08:34

コメント欄で失礼します。 以前アドバイスいただいた<第3問>のソースについて 前提条件として 【重要】条件分岐はCase文を使用すること ・int型変数「seinen」フィールドに生年を保持する。 ・seinenを引数にしてjikkanを呼び出し、結果を二次元配列で受け取る ・seinenを引数にしてjunishiを呼び出し、結果を二次元配列で受け取る コンソールに出力する ・private String[][] jikkan(int seinen) 十干を計算して二次元配列の形でreturnする ・private String[][] junishi(int seinen) 十二支を計算して二次元配列の形でreturnする ヒント 2次元配列を使って漢字と読み仮名の両方を保持する 十二支と十干はメソッドに入れても構いませんし、staticをつけてクラス変数化しても構いません。 というものがあり、再提出となりここ2日間二次元配列について調べながら取り組んでいたのですが、戻り値がうまくいかなかったり、無事出力しても 年の干支は[[Ljava.lang.String;@1540e19d[[Ljava.lang.String;@677327b6([[Ljava.lang.String;@1540e19d)です。 のような文字化けになってしまったりとうまくいきません。 お時間がありましたらまたアドバイスいただきたいです。宜しくお願いします。 下記に現在取り組み中のソースを添付いたします。 イメージとしては2次元配列の中から該当の漢字とひらがなの読みをSwitch分で分岐させ、それを出力するというイメージです。 現在の状態だとMainで -aを変数に解決できません(これのa~d)が出ます。 String[][] jikkan = jikkan(seinen,null, null); String[][] juuni = juuni(seinen, null, null); ここの部分はEclipseでエラーを解除しようとしたら自動でnullが入ってしまいます。
ASHN

2018/05/03 08:36 編集

教えていただいたものを多少いじっているので順番等少し変わっています。 ※まだint型変数「seinen」フィールドは作成できておりません。 package test; import java.util.Scanner; class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int seinen = sc.nextInt(); String[][] jikkan = jikkan(seinen,null, null); String[][] juuni = juuni(seinen, null, null); System.out.println( seinen +"年の干支は"+ a + c +"(" + b + d +")です。"); } public static String[][] jikkan(int n, String a, String b){ String[][] jikkan = {{"庚","辛","壬","癸","甲","乙","丙","丁","戊","己"},{"こう","しん","じん","き","こう","おつ","へい","てい","ぼ","き"}};; n = (n)%10; switch(n){ case 0: a = jikkan[0][0]; b = jikkan[1][0]; //nが0の場合は庚とこうを保持してmainで表示させたい break; case 1: a = jikkan[0][1]; b = jikkan[1][1]; break; case 2: a = jikkan[0][2]; b = jikkan[1][2]; break; case 3: a = jikkan[0][3]; b = jikkan[1][3]; break; case 4: a = jikkan[0][4]; b = jikkan[1][4]; break; case 5: a = jikkan[0][5]; b = jikkan[1][5]; break; case 6: a = jikkan[0][6]; b = jikkan[1][6]; break; case 7: a =jikkan[0][7]; b=jikkan[1][7]; break; case 8: a =jikkan[0][8]; b=jikkan[1][8]; break; case 9: a =jikkan[0][9]; b=jikkan[1][9]; break; } return jikkan; //[][]? 2次元配列の形でreturnする? } public static String[][] juuni(int n, String c, String d){ String[][] juuni = {{"申","酉","戌","亥","子","丑","寅","卯","辰","巳","午","未"},{"さる","とり","いぬ","い","ね","うし","とら","う","たつ","み","うま","ひつじ"}}; n = (n)%12; switch(n){ case 0: c = juuni[0][0]; d = juuni[1][0]; //nが0の場合は申とさるを保持してmainで表示させたい break; case 1: c = juuni[0][1]; d = juuni[1][1]; break; case 2: c = juuni[0][2]; d = juuni[1][2]; break; case 3: c = juuni[0][3]; d = juuni[1][3]; break; case 4: c = juuni[0][4]; d = juuni[1][4]; break; case 5: c = juuni[0][5]; d = juuni[1][5]; break; case 6: c = juuni[0][6]; d = juuni[1][6]; break; case 7: c = juuni[0][7]; d = juuni[1][7]; break; case 8: c = juuni[0][8]; d = juuni[1][8]; break; case 9: c = juuni[0][9]; d = juuni[1][9]; break; case 10: c = juuni[0][10]; d = juuni[1][10]; break; case 11: c = juuni[0][11]; d = juuni[1][11]; break; } return juuni; //[][]? 2次元配列の形でreturnする? } }
退会済みユーザー

退会済みユーザー

2018/05/03 10:27 編集

一応、ソースを載せましたが、switch文をどこで使えばいいか いまいちピンと来ておりません。 (おそらく 私が新しく書いたソースのnumのところで0か1かで分岐すると思いますが)
退会済みユーザー

退会済みユーザー

2018/05/03 10:13

コメントにあるソースを書きながら 「switch文で12個の分岐をしなくても変数 year % 12を使えば番号指定で 配列が取り出せる」と気づいたと思います。
退会済みユーザー

退会済みユーザー

2018/05/03 10:18

出力表示が丁酉(ひのととり)と 2つのメソッドjikkan,juuniの戻り値が混ざった状態なので 引数を2つにして表示するのがいいと思いました。 (そもそもメソッドの戻り値は基本一つなので) クラスで書く方法はいま考え中です。
ASHN

2018/05/03 10:37

お返事ありがとうございます。 Switch文必要ないですよね・・・ 要求仕様に書いてあるので使用していけないと言われまして・・・余計に頭を抱えております。 ちょっと今外出してるので戻りしだい打ち込んで確認させていただきます!
退会済みユーザー

退会済みユーザー

2018/05/03 13:20 編集

すみません、おそらくswich文で書き直すとメソッドjikkanの部分が以下のようになると思います。 (メソッドjuuniも同様) public static String jikkan(int num, int year){ String[][] jikkan = {{"庚","辛","壬","癸","甲","乙","丙","丁","戊","己"},{"かのえ","かのと","みずのへ","みずのと","きのえ","きのと","ひのえ","ひのと","つちのえ","つちのと"}}; String answer = ""; switch(year){ case 0: answer = jikkan[0][year % 10]; break; case 1: answer = jikkan[1][year % 10]; break; default: break; } return answer; }
退会済みユーザー

退会済みユーザー

2018/05/03 11:59 編集

一応、クラスを使ったものも載せておきました。
退会済みユーザー

退会済みユーザー

2018/05/03 12:24

あと、コメント欄に書いてあるソースを見て気づいたことを述べると、 public static String[][] jikkan(int n, String a, String b) と書いてありますが、 引数にしてある a,bは本来 戻り値になるものです。 またnのところですが、変数の意味を持たせるためにyearなどにすることをおすすめします。
退会済みユーザー

退会済みユーザー

2018/05/03 12:25

戻り値は jikkan[0][year % 10]などにしておけばいいです。
umyu

2018/05/03 13:06

>Stars1024さんへ 質問文の仕様として求めているメッセージが、>2017年の干支は丁酉(ひのととり)です。なので、定義すべきは音読みではなく訓読みの方です。 >ASHNさんへ 回答欄のコメント欄も長くなっていますし、新たな質問として、ポイントを絞って知りたい点を質問していただけませんか。
退会済みユーザー

退会済みユーザー

2018/05/03 13:22

すみません、訓読みに訂正しました。
umyu

2018/05/03 13:35

>Stars1024さんへ コード修正ありがとうございました。
退会済みユーザー

退会済みユーザー

2018/05/03 14:03

>umyuさんへ こちらこそご指摘ありがとうございました。
ASHN

2018/05/03 14:58

>Stars1024さんへ 2次元配列のことばかりに頭がいって十干の表示すべき読み方も間違えてることに気が付いてませんでしたすいません・・・ 早速教えていただいたもので実行してみました。書き方が全然違うのにClassの方も同様に表示出来てすごいですね・・・ まだ2次元配列の戻り値など、完全に理解できていない部分も多々あり、このような比較したコードを書いていただけて非常に助かっております。比較してそれぞれどのような役割をしているのか追ってみます。 String answer = jikkan(0,year) + juunisi(0,year) + "(" + jikkan(1,year) + juunisi(1,year) + ")"; System.out.println(year + "年は" + answer + "です。"); 全て System.out.printlnなどを使って出力するものだと思っていたのですが、文字型の変数だと?「jikkan(0,year) + juunisi(0,year) + "(" + jikkan(1,year) + juunisi(1,year) + ")"」 このようなものも代入出来て、これらをanswerという形でまとめて表示させられることも全然知りませんでした。勉強になります。ありがとうございます。
ASHN

2018/05/03 15:01

>umyuさんへ ご指摘ありがとうございます。 コメント欄だと他の人に見られないものだと思っていたのですがそうではないのですね。 まだ無知なもので質問した内容もよく丸投げのようなコメントをいただくので、新しく質問するときは自分でやれるだけのことはやった状態にし、要点をまとめて質問させていただきます。
ASHN

2018/05/04 07:26

switch文を使ったやり方ですが無事に出力できましたので貼っておきます。 すごいごちゃごちゃしてますね・・・ import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int year = sc.nextInt(); Kanshi kanshi = new Kanshi(); Kanshi jikkan = kanshi.Jikkan(year); Kanshi juuni = kanshi.Juuni(year); String answer = jikkan.kanji + juuni.kanji + "(" + jikkan.hiragana + juuni.hiragana + ")"; System.out.println(year + "年は" + answer + "です。"); } } class Kanshi{ String kanji; String hiragana; public Kanshi Jikkan(int year){ String[][] jikkan_type = {{"庚","辛","壬","癸","甲","乙","丙","丁","戊","己"},{"かのえ","かのと","みずのへ","みずのと","きのえ","きのと","ひのえ","ひのと","つちのえ","つちのと"}}; Kanshi jikkan = new Kanshi(); switch(year = year % 10){ case 0: jikkan.kanji = jikkan_type[0][year]; jikkan.hiragana = jikkan_type[1][year]; break; case 1: jikkan.kanji = jikkan_type[0][year]; jikkan.hiragana = jikkan_type[1][year]; break; case 2: jikkan.kanji = jikkan_type[0][year]; jikkan.hiragana = jikkan_type[1][year]; break; case 3: jikkan.kanji = jikkan_type[0][year]; jikkan.hiragana = jikkan_type[1][year]; break; case 4: jikkan.kanji = jikkan_type[0][year]; jikkan.hiragana = jikkan_type[1][year]; break; case 5: jikkan.kanji = jikkan_type[0][year]; jikkan.hiragana = jikkan_type[1][year]; break; case 6: jikkan.kanji = jikkan_type[0][year]; jikkan.hiragana = jikkan_type[1][year]; break; case 7: jikkan.kanji = jikkan_type[0][year]; jikkan.hiragana = jikkan_type[1][year]; break; case 8: jikkan.kanji = jikkan_type[0][year]; jikkan.hiragana = jikkan_type[1][year]; break; case 9: jikkan.kanji = jikkan_type[0][year]; jikkan.hiragana = jikkan_type[1][year]; break; default: break; } return jikkan; } public Kanshi Juuni(int year){ String[][] juuni_type = {{"申","酉","戌","亥","子","丑","寅","卯","辰","巳","午","未"},{"さる","とり","いぬ","い","ね","うし","とら","う","たつ","み","うま","ひつじ"}}; Kanshi juuni = new Kanshi(); switch(year = year % 12){ case 0: juuni.kanji =juuni_type[0][year]; juuni.hiragana = juuni_type[1][year]; break; case 1: juuni.kanji = juuni_type[0][year]; juuni.hiragana = juuni_type[1][year]; break; case 2:juuni.kanji = juuni_type[0][year]; juuni.hiragana =juuni_type[1][year]; break; case 3: juuni.kanji = juuni_type[0][year]; juuni.hiragana = juuni_type[1][year]; break; case 4: juuni.kanji = juuni_type[0][year]; juuni.hiragana = juuni_type[1][year]; break; case 5: juuni.kanji = juuni_type[0][year]; juuni.hiragana = juuni_type[1][year]; break; case 6: juuni.kanji =juuni_type[0][year]; juuni.hiragana = juuni_type[1][year]; break; case 7: juuni.kanji =juuni_type[0][year]; juuni.hiragana = juuni_type[1][year]; break; case 8: juuni.kanji =juuni_type[0][year]; juuni.hiragana = juuni_type[1][year]; break; case 9: juuni.kanji =juuni_type[0][year]; juuni.hiragana = juuni_type[1][year]; break; case 10 : juuni.kanji =juuni_type[0][year]; juuni.hiragana = juuni_type[1][year]; break; case 11: juuni.kanji =juuni_type[0][year]; juuni.hiragana = juuni_type[1][year]; break; default: break; } return juuni; } }
退会済みユーザー

退会済みユーザー

2018/05/04 07:32

switch文のところは jikkan.kanji = jikkan_type[0][year]; jikkan.hiragana = jikkan_type[1][year]; juuni.kanji =juuni_type[0][year];juuni.hiragana = juuni_type[1][year]; とできるのでやはりswitch文は不要ということがわかると思います。 (その問題はどこにswitch文を使わせたいのか甚だ疑問です。)
ASHN

2018/05/04 07:59

特に場所も書いてないですしね。 使うとしたら十干と十二支のところだと思うのですが・・・使い方覚えるのにはよかったですが、遠回りでしたね。 前提条件にpublic Kanshi Jikkan(int year)ではなくprivateと記載がされていて、 今アクセス修飾子について調べているところなのですが、 https://www.sejuku.net/blog/22679 ここよりprivateだと同一クラス内のみと記載があります。 ここも何故staticでなくprivateで記載されているのか謎なのですが、private Kanshi Jikkan(int year)とした場合にMainクラスのkanshi.Jikkan(year);で呼び出す方法はあるのでしょうか。 現在探っているところですがご存知でしたら知識をいただきたいです。
guest

0

自分で勉強するための問題ですから、丸投げせずにもうちょい自分であがいてみましょうよ
具体的になにがわからないのでしょうか

投稿2018/04/23 12:44

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ASHN

2018/04/23 13:08

お返事ありがとうございます。 自暴自棄になって丸投げしてしまいましたすいません。 まずレベル3の問題の話ですが  int型変数「seinen」フィールドに生年を保持する。  seinenを引数にしてjikkanを呼び出し、結果を二次元配列で受け取る  seinenを引数にしてjunishiを呼び出し、結果を二次元配列で受け取る この部分がわかりません。 public static void main(String args[]) {   この間の部分に下の2つのメソッド?を呼び出して表示させるイメージでしょうか? } private String[][] jikkan(int seinen)  十干を計算して二次元配列の形でreturnする private String[][] junishi(int seinen)  十二支を計算して二次元配列の形でreturnする
guest

0

少なくとも干支に関しては参照リンク先の説明をそのまま実践すればいいだけですよ?
まさか「割ったあまり」が計算できないとかですか?

投稿2018/04/23 13:04

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ASHN

2018/04/23 13:12

>swordoneさん お返事ありがとうございます。 記述の仕方といいますか、全体的な絵が見えてこないんです。 レベル2の問題は package kakzezan; public class Kakezan { public static void main(String[] args) { kuku(); } public static void kuku(){ int i,j; for(i=1; i<=9; i++) { for(j=1; j<=9; j++) { System.out.print(i * j+"\t"); } System.out.print("\n"); } } } こんな感じで記述したのですが、これをレベル3に当てはめた場合、 public static void kuku(){に該当する部分で干支の計算をさせて、 上の方のpublic static void main(String[] args) { で呼び出して表示させるようなイメージでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問