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

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

ただいまの
回答率

90.82%

  • Java

    12543questions

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

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

解決済

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 656

ASHN

score 1

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型の動的配列を作るところです。
作ったデータがどこにいるのかをよく追いかけながら作成してみてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ASHN

    2018/04/23 23:23

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

    キャンセル

  • asahina1979

    2018/04/23 23:27

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

    キャンセル

  • ASHN

    2018/04/23 23:55

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

    キャンセル

回答 5

+2

  • 組み合わせなので六十花甲子の計算のほうがいいとおもう題名ですが
    取得するのは [[甲,きのえ],[子,ね]] のようになると思いますが、
    get十二支(int since) で String[][] を返す必要性が感じられません。
    また 4時間なのか6時間なのかちぐはぐですね

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/23 23:21

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

    キャンセル

+2

レベル3 干支の計算

だけ実装してみました。

条件分岐はCase文を使用すること

に関しては使わなくても実装できるので、スルーしました。
無駄にクラス分けを行ったのでコードが長くなってしまいましたが、ご参考まで。

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Scanner;

public class A123212 {
    private static final EtoCalendar etoCalendar = EtoCalendar.getInstance();
    private static final Scanner sc = new Scanner(System.in);

    int seinen;// 変数名は原文ママ

    A123212(int seinen) {
        this.seinen = seinen;
    }

    public static void main(String[] args) throws NumberFormatException {
        int year = get_input();
        A123212 prog = new A123212(year);
        prog.displayAnswer();
        prog.displayAnswerTwo();
    }

    private void displayAnswer() {
        String[][] jikkan = this.jikkan(this.seinen);
        String[][] junishi = this.junishi(this.seinen);
        final String kanji = jikkan[0][0] + junishi[0][0];
        final String hiragana = jikkan[1][0] + junishi[1][0];
        System.out.println(String.format("%d年の干支は%s(%s)です。", this.seinen, kanji, hiragana));
    }

    private void displayAnswerTwo() {
        Eto eto = etoCalendar.getEto(this.seinen);
        System.out.println(String.format("%d年の干支は%s(%s)です。", this.seinen, eto.getKanji(), eto.getHiragana()));
    }

    public static int get_input() throws NumberFormatException {
        return Integer.parseInt(sc.nextLine());
    }

    // メソッド名、引数、戻り値は原文ママ
    private String[][] jikkan(int seinen) {
        CelestialStem stem = etoCalendar.getJikkan(seinen);
        return new String[][] { { stem.getKanji() }, { stem.getHiragana() } };
    }

    // メソッド名、引数、戻り値は原文ママ
    private String[][] junishi(int seinen) {
        EarthlyBranches stem = etoCalendar.getJunishi(seinen);
        return new String[][] { { stem.getKanji() }, { stem.getHiragana() } };
    }
}

interface Readings {
    String getKanji();

    String getHiragana();
}

enum CelestialStem implements Readings {
    ONE("甲", "きのえ"), TWO("乙", "きのと"), THREE("丙", "ひのえ"), FOUR("丁", "ひのと"), FIVE("戊", "つちのえ"), SIX("己",
            "つちのと"), SEVEN("庚", "かのえ"), EIGHT("辛", "かのと"), NINE("壬", "みずのえ"), TEN("癸", "みずのと");
    CelestialStem(String kanji, String hiragana) {
        this.kanji = kanji;
        this.hiragana = hiragana;
    }

    private final String kanji;
    private final String hiragana;

    @Override
    public String getKanji() {
        return this.kanji;
    }

    @Override
    public String getHiragana() {
        return this.hiragana;
    }

    @Override
    public String toString() {
        return this.name();
    }
}

enum EarthlyBranches implements Readings {
    ONE("子", "ね"), TWO("丑", "うし"), THREE("寅", "とら"), FOUR("卯", "う"), FIVE("辰", "たつ"), SIX("巳", "み"), SEVEN("午",
            "うま"), EIGHT("未", "ひつじ"), NINE("申", "さる"), TEN("酉", "とり"), ELEVEN("戌", "いぬ"), TWELVE("亥", "い");
    EarthlyBranches(String kanji, String hiragana) {
        this.kanji = kanji;
        this.hiragana = hiragana;
    }

    private final String kanji;
    private final String hiragana;

    @Override
    public String getKanji() {
        return this.kanji;
    }

    @Override
    public String getHiragana() {
        return this.hiragana;
    }

    @Override
    public String toString() {
        return this.name();
    }
}

class Eto implements Readings {
    private final String kanji;
    private final String hiragana;

    public Eto(String kanji, String hiragana) {
        this.kanji = Objects.requireNonNull(kanji);
        this.hiragana = Objects.requireNonNull(hiragana);
    }

    public Eto(CelestialStem stem, EarthlyBranches animal) {
        this(stem.getKanji() + animal.getKanji(), stem.getHiragana() + animal.getHiragana());
    }

    @Override
    public String getKanji() {
        return this.kanji;
    }

    @Override
    public String getHiragana() {
        return this.hiragana;
    }

    @Override
    public String toString() {
        return String.join("-", this.kanji, this.hiragana);
    }
}

final class EtoCalendar {
    private static final EtoCalendar instance = new EtoCalendar();
    private static final List<CelestialStem> stems = Collections
            .unmodifiableList(Arrays.asList(CelestialStem.values()));
    private static final List<EarthlyBranches> animals = Collections
            .unmodifiableList(Arrays.asList(EarthlyBranches.values()));

    private EtoCalendar() {
        ;
    }

    public static EtoCalendar getInstance() {
        return instance;
    }

    public Eto getEto(int year) {
        return new Eto(getJikkan(year), getJunishi(year));
    }

    public CelestialStem getJikkan(int year) {
        int index = (year + 6) % stems.size();
        return stems.get(index);
    }

    public EarthlyBranches getJunishi(int year) {
        int index = (year + 8) % animals.size();
        return animals.get(index);
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/04 17:11

    要求を忠実に再現いただきありがとうございます。
    見たことない文字ばかりでうおってなってますが今Ecripseに移して動きを確認しているところです。
    オーバーライドに関してまだ無知なのですが勉強させていただきます。

    出力が2つあるのは2種類の出力方法を記載していただいているという認識でよろしいでしょうか。
    全く違う書き方をしているのに同じ結果がきちんと出力されていて感動です。
    1つ1つの動きを確認して勉強させていただきます。

    キャンセル

  • 2018/05/04 20:41

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

    キャンセル

  • 2018/05/05 20:45

    全く違う書き方をしているのに全く同じ答えを出力で来ていてすごいですね
    状況に応じてどっちを使うとか出てくることがありそうなのでいろんなパターンを覚えて知識を広げていきたいです。

    // メソッド名、引数、戻り値は原文ママ
    ここのアクセス修飾子がprivateとなっているところはJavaBeansの原理を利用しているのでしょうか?
    (getとset)

    キャンセル

  • 2018/05/05 20:51 編集

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

    キャンセル

checkベストアンサー

+1

<第3問>

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       int year = sc.nextInt();
       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];
    }
}


<第4問>
第4問は(ヒントとして、)データが入力ではない状態で書きました。

import 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);
    }
}


<追記>
イメージ説明

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date d1 = calendar.getTime();

        ArrayList<Member>person = new ArrayList<>();
        System.out.println("IDと名前を入力");
        for(int i = 1; i <= 3 ;i++){
            System.out.println(i + "人目");
            String id,name,date1;
            System.out.print("ID:");
            id = sc.nextLine();
            System.out.print("名前:");
            name = sc.nextLine();
            date1 = sdf.format(d1);

            person.add(new Member(id,name,date1));
        }
        for(Member member : person){
            member.Show_profile();
        }
    }
}

class Member{
    private String my_Id;
    private String my_Name;
    private String add_Date;

    public Member(String id, String name, String date){
        my_Id = id;
        my_Name = name;
        add_Date = date;
    }
    public void Show_profile(){
        System.out.println("ID:" + my_Id + "名前: " + my_Name + "現在時刻:" + add_Date);
    }
}


<追記>

import java.util.Scanner;

public class Main {
    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        int year = sc.nextInt();
        String answer = jikkan(0,year) + juunisi(0,year)  + "(" + jikkan(1,year) + juunisi(1,year) + ")";
        System.out.println(year + "年は" + answer + "です。");


    }
    public static String jikkan(int num, int year){
        String[][] jikkan = {{"庚","辛","壬","癸","甲","乙","丙","丁","戊","己"},{"かのえ","かのと","みずのへ","みずのと","きのえ","きのと","ひのえ","ひのと","つちのえ","つちのと"}};
        year = year % 10;

        String answer = jikkan[num % 2][year];

        return answer;
    }

    public static String juunisi(int num, int year){
        String[][] juuni = {{"申","酉","戌","亥","子","丑","寅","卯","辰","巳","午","未"},{"さる","とり","いぬ","い","ね","うし","とら","う","たつ","み","うま","ひつじ"}};

        year = year % 12;

        String answer = juuni[num % 2][year];

        return answer;
    }
}


<追記>classで書きました。

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();
        jikkan.kanji = jikkan_type[0][year % 10];
        jikkan.hiragana = jikkan_type[1][year % 10];
        return jikkan;
    }

    public Kanshi Juuni(int year){

        String[][] juuni_type = {{"申","酉","戌","亥","子","丑","寅","卯","辰","巳","午","未"},{"さる","とり","いぬ","い","ね","うし","とら","う","たつ","み","うま","ひつじ"}};
        Kanshi juuni = new Kanshi();
        juuni.kanji = juuni_type[0][year % 12];
        juuni.hiragana = juuni_type[1][year % 12];
        return juuni;
    }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/23 23:16

    >Stars1024さん
    お返事ありがとうございます!こんなにすぐ書けるなんてすごいですね!尊敬します。
    そしてアドバイスありがとうございます。非常に参考になります。

    質問なのですが、一番上のimportはどのような意味があるのでしょうか

    キャンセル

  • 2018/04/24 07:36

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

    キャンセル

  • 2018/04/25 21:26

    なるほど、勉強になります。
    教えていただいた問題3のソースを実行しようとしたところ
    「リソース・リーク:'sc'閉じられることはありません」

    と表示されました。調べたところclose?しなくてはいけないみたいなのですが、どのあたりに入れるのが正しいでしょうか?

    キャンセル

  • 2018/04/25 22:16

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

    キャンセル

  • 2018/04/25 22: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];
    }
    }

    キャンセル

  • 2018/04/25 23:08

    すいません!表示されました!
    1度整理してから次は問題4に進もうと思います。

    ちなみになのですが、importを使わない記述となると複雑になりますか?
    (importをまだ使用したことがなく、教えていただいたものを参考にこれから覚えよう思うのですが)

    キャンセル

  • 2018/04/25 23:19

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

    キャンセル

  • 2018/04/25 23:34

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

    キャンセル

  • 2018/04/26 12:24

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

    キャンセル

  • 2018/04/26 12:26

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

    キャンセル

  • 2018/04/26 12:26

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

    キャンセル

  • 2018/04/26 12:28

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

    キャンセル

  • 2018/04/26 21:39

    これは便利ですね!すっきりしてて見やすいですし。
    とりあえず一番使いそうなjava.io.*は頭に入れておきます!
    C言語で言うstdio.hとかmath.hとかと似てる?認識でいいんですかね(違ってたらすいません;;

    例の通りに入力してみたのですが、

    String s = r.readLine();

    ここでrを解決できませんと表示されています。
    このrはどこのものでしょうか?変数?いろいろいじってみたけど解決できません・・・

    キャンセル

  • 2018/04/26 21:54

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

    キャンセル

  • 2018/04/26 22: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 21:58

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

    キャンセル

  • 2018/04/26 21:58

    横から失礼します。

    @Stars1024 さん
    引用したり、表現を借りたりする際には引用元を明記するのがマナーかと...
    ・ http://neos21.hatenablog.com/entry/2016/06/08/010248
    ・ https://oku.edu.mie-u.ac.jp/~okumura/java2/io.html

    キャンセル

  • 2018/04/26 22:05 編集

    すみません、載せるのを忘れてました。今度から気をつけます。
    https://oku.edu.mie-u.ac.jp/~okumura/java2/io.html

    キャンセル

  • 2018/04/26 22: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文で入力させて出力させるイメージですよね?
    文法があやふやなのでちゃんと書ける自信が全くないですがやってみます。

    キャンセル

  • 2018/04/28 19: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人分の入力が終わったらそれを出力するというイメージなのですが、これを実装するとなると思考が止まってしまいます。

    どのような書き方をしたらよろしいでしょうか。アドバイスいただきたいです。

    キャンセル

  • 2018/04/28 21:30

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

    キャンセル

  • 2018/04/29 16:12

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

    キャンセル

  • 2018/04/29 16:13 編集

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

    キャンセル

  • 2018/04/30 00:03

    ありがとうございます。Stars1024さんには凄く助けていただき感謝しきれません。

    3人分まとめてではなく1人ずつ追加して表示という考えで考えた方がよかったですね
    3人表示というところに目が行き過ぎて混乱していました。
    今度から図に書いてやりたいことを整理して1つ1つ整理してから挑もうと思います。

    日時の加算や減算もできるのですね。
    せっかくのお休みなので今まで教わったこと含めData型とCalender型についてもじっくり学習させていただきます。

    キャンセル

  • 2018/04/30 12:37 編集

    >今度から図に書いてやりたいことを整理して1つ1つ整理してから挑もうと思います。

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

    キャンセル

  • 2018/04/30 18:21

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

    キャンセル

  • 2018/05/03 17: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が入ってしまいます。

    キャンセル

  • 2018/05/03 17: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 19:27 編集

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

    キャンセル

  • 2018/05/03 19:13

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

    キャンセル

  • 2018/05/03 19:18

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

    キャンセル

  • 2018/05/03 19:37

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

    キャンセル

  • 2018/05/03 22: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 20:59 編集

    一応、クラスを使ったものも載せておきました。

    キャンセル

  • 2018/05/03 21:24

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

    キャンセル

  • 2018/05/03 21:25

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

    キャンセル

  • 2018/05/03 22:06

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

    キャンセル

  • 2018/05/03 22:22

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

    キャンセル

  • 2018/05/03 22:35

    >Stars1024さんへ
    コード修正ありがとうございました。

    キャンセル

  • 2018/05/03 23:03

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

    キャンセル

  • 2018/05/03 23: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という形でまとめて表示させられることも全然知りませんでした。勉強になります。ありがとうございます。

    キャンセル

  • 2018/05/04 00:01

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

    キャンセル

  • 2018/05/04 16: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 16: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文を使わせたいのか甚だ疑問です。)

    キャンセル

  • 2018/05/04 16: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);で呼び出す方法はあるのでしょうか。

    現在探っているところですがご存知でしたら知識をいただきたいです。

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/23 22: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する

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/23 22: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) {

    で呼び出して表示させるようなイメージでしょうか

    キャンセル

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

  • ただいまの回答率 90.82%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    12543questions

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