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

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

ただいまの
回答率

90.47%

  • Java

    14101questions

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

java カレンダー 土曜日改行

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,463
退会済みユーザー

退会済みユーザー

4/22質問内容を少々修正いたしました。
?????に何を入れれば土曜日で改行となりますでしょうか?
ヒントとして、【int week = cal.get(java.util.Calendar.DAY_OF_WEEK);】が利用出来る筈ということなんですがさっぱりです・・・

public class Calendar {

    public static void main(String[] args) {

        java.util.Calendar cal = java.util.Calendar.getInstance();

        int year = Integer.parseInt(args[0].substring(0, 4));
        int month = Integer.parseInt(args[0].substring(4));

        cal.set(java.util.Calendar.YEAR, year);
        cal.set(java.util.Calendar.MONTH, month - 1);
        cal.set(java.util.Calendar.DAY_OF_MONTH, 1);

        //日曜日=1で土曜日=7まで
        int week = cal.get(java.util.Calendar.DAY_OF_WEEK);

        //月末日
        int lastDay = cal.getActualMaximum(java.util.Calendar.DAY_OF_MONTH);

        System.out.println( year + "年" + month + "月");
        System.out.println(" 日 月 火 水 木 金 土");

        //日付のない日数分回して空欄出力
        for (int i = 1; i < week ; i ++) {

            System.out.print("   ");

        }

        String empty;

        //1日から月末日まで、カレンダーを表示する
        for (int day = 1 ; day <= lastDay ; day ++) {

            empty = "";

            if (day < 10) {

                empty = " ";
            }

            System.out.print( empty + day + " ");

            //dayのDAY_OF_WEEKがSATURDAY(7)なら
            if (??????? == 7){

                System.out.println();
            }
        }
    }
}

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • swordone

    2016/04/20 11:32

    細かいですが… ×助長→○冗長

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2016/04/20 11:34

    本当だΣご指摘ありがとうございます!

    キャンセル

回答 4

checkベストアンサー

+3

「今の曜日=土曜日」という条件をそのままコードで表現するなら、Calendarのインスタンスの日付を操作しながら曜日をチェックする、という格好になるでしょうか。

int month = cal.get(Calendar.MONTH);
for(int day = 1; cal.get(Calendar.MONTH) == month; cal.add(Calendar.DATE, 1), day++){
    (日付表示処理)
    if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){
        System.out.println();
    }
}

追記
月の最終日が取れてるならこれでいいのか

for(int day = 1; day <= lastDay; cal.add(Calendar.DATE, 1), day++){
    (日付表示処理)
    if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){
        System.out.println();
    }
}

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/04/22 09:29

    ご回答ありがとうございました。
    いただいた回答を元に試行錯誤しておりましたらお礼申し上げるのが遅くなり、大変失礼いたしました。

    キャンセル

  • 2016/04/22 15:35

    質問内容が修正されましたが、swordoneさんの回答ソースをちゃんと読んで理解してますか? > Lawlietさん

    キャンセル

  • 2016/04/22 15:53

    きちんと目を通させてはいただいているのですが、理解は出来ていないです・・・

    キャンセル

  • 2016/04/22 23:50

    理解できていないならその部分に絞って質問したほうがいいですよ。
    この質問の編集はまるで私の回答が完全無視されているようです。

    キャンセル

  • 2016/04/25 10:16

    そのような意図は全くなかったのですが、大変失礼いたしました。
    どこがわからないのかわからない、といったレベルだったのです。

    キャンセル

+1

if(counter % 7 == 0) { System.out.println(); }

これじゃだめですかね?

追記:
swordoneさんのソースを一部改編したうえで解説してみます。

コード
// int month は前のほうで宣言したものを再利用
month = cal.get(Calendar.MONTH);
for(                                 /* ← for文の初期処理部分は省略 */ 
   ;cal.get(Calendar.MONTH) == month /* ← for文の続行判定:ループに入った時と月が同じ間だけ実行 */ 
   ;cal.add(Calendar.DATE, 1)        /* ← for文の次処理準備:Calendarインスタンス「cal」の日付を翌日に進める */ 
){

    int day = cal.add(Calendar.DATE); // 何度も使うので日付の数値だけ変数に確保

    // 区切りスペース出力
    System.out.print("  ");

    // dayが10未満なら10の位の文のスペース出力
    if ( day < 10 ) System.out.print(" ");

    // 日付出力
    System.out.print(day);

    // dayの曜日 == calの日付の曜日を取得・土曜日だったら開業
    if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){
        System.out.println();
    }
}


各行の意味はコメントで記述しています。
理解の一助になれば。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/04/20 11:29

    質問の方法が悪くて申し訳ありません、int counterという変数自体をなくせないか?と考えております。
    元々の質問も修正いたします、誤解を与えてしまいましてすみません。

    キャンセル

  • 2016/04/22 16:29 編集

    swordoneさんの回答ソースに対する行単位解説を追記しました。

    キャンセル

  • 2016/04/25 14:13

    行単位解説ありがとうございます!
    ソースの一行一行意味を考察しながら読み解いておりましたので大変助かりました。
    感謝いたします。

    キャンセル

0

こんな感じ?

int wlen = 7 - week + 1;
for (int day = 1; day <= lastDay; ) {
    for (int w = 0; w < wlen; ++w) {
        int d = day + w;
        if (d > lastDay) break;
        System.out.printf("%2d ", d);
    }
    System.out.printf("\n");
    day += wlen;
    wlen = 7;
}

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/04/22 09:26

    ご回答ありがとうございました!
    試行錯誤しておりましたらお礼が遅くなり、失礼いたしました。

    キャンセル

0

たくさんのご助力をいただきまして、誠にありがとうございました。
私のレベルが低すぎたためにせっかくいただいた回答を理解できず、結果回答してくださった皆様に不快な思いをさせてしまったことを深くお詫び申し上げる次第でございます。
質問の結果ですが、以下のようにすることで解決することが出来ました(私のレベルですとこれが理解できる最上位でした)

最初にcal.setで(Calendar.MONTH,1)と設定した点を、ループの中で再度(Calendar.MONTH, day)とすることで上手く日付と曜日をループで連動出来ることをようやく理解できました。
ありがとうございました。

public class Calendar {

    public static void main(String[] args) {

        java.util.Calendar cal = java.util.Calendar.getInstance();

        int year = Integer.parseInt(args[0].substring(0, 4));
        int month = Integer.parseInt(args[0].substring(4));

        cal.set(java.util.Calendar.YEAR, year);
        cal.set(java.util.Calendar.MONTH, month - 1);
        cal.set(java.util.Calendar.DAY_OF_MONTH, 1);

        //日曜日=1で土曜日=7まで
        int week = cal.get(java.util.Calendar.DAY_OF_WEEK);

        //月末日
        int lastDay = cal.getActualMaximum(java.util.Calendar.DAY_OF_MONTH);

        System.out.println( year + "年" + month + "月");
        System.out.println(" 日 月 火 水 木 金 土");

        //日付のない日数分回す
        for (int i = 1; i < week ; i ++) {

            System.out.print("   ");

        }

        String empty;;

        //1日から月末日まで、カレンダーを表示する
        for ( int day = 1 ; day <= lastDay ; day ++) {

            empty = "";

            if (day < 10) {

                empty = " ";
            }

            System.out.print( empty + day + " ");

            //月の何日かをdayで再set
            cal.set(java.util.Calendar.DAY_OF_MONTH, day);
            week = cal.get(java.util.Calendar.DAY_OF_WEEK);

            if ( week == 7 )  {

                System.out.println();

            }
        }
    }
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

  • 受付中

    [java][日付チェック]質問

    java初心者です。 テキストファイルを一行づつ読み込んで行く時に、 32日や14月など、異常な日付が紛れていた場合例外として処理する方法はありますでしょうか? while ((

  • 解決済

    java 日付の取得と変更について

    javaの日付の取得と変更に関するコードについて質問です 参考書のとおりに、下記のコードを書いて実行してみたのですが 実行してみても、現在の日付から5日後の日付が出力されず、現在

  • 解決済

    javaの入出力について

    年、月、日を順番に入力して、 yyyy年m月d日(曜日)のように、 出力させたいです。 下に日付までの結果を表示させるだけの プログラムを作成しました。 そこで2つ教えていただき

  • 受付中

    javaである期間の経過年月日時分秒を算出したい

    下記のようなStringで与えられる年月日時分秒 "2014/12/20 23:45:23"と 現在の時刻を比較し、 与えられた時刻から現在までyy年mmか月dd日 hh時間

  • 受付中

    JAVA dateの複数のデータの時刻だけを加算するには

    date型で 複数の日時と時刻が含まれるデータがあります、これをjavaで全部足して合計時間を出すにはどうすればいいでしょうか。 例えば 2016-2-25 06:30:10

  • 解決済

    java カレンダー作成

    追記:JDKのバージョンは1.6.0_19です。 そして指示によりimportは使用できないようになっています。 コマンドライン引数で年月の値を引き渡し(201604の

  • 受付中

    サーブレットを直接表示させたい

    前提・実現したいこと スケジュールを登録、更新、削除するwebアプリケーションを作成しています サーブレットの名前をアドレスバーに打ち込んだら直接サーブレットの内容が表示される

  • 解決済

    呼び出すメソッドで戻り値を変えたい

    CalendarClassを使って、1年分の日付を取得するPGを作ってます。 メソッドに返す戻り値を変える良い方法はありませんか。 例えば、mainClassでthisMo

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

  • Java

    14101questions

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