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

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

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

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

Q&A

解決済

4回答

5904閲覧

java カレンダー 土曜日改行

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

1グッド

0クリップ

投稿2016/04/20 02:20

編集2016/04/22 06:22

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

}

KiyoshiMotoki👍を押しています

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

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

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

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

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

swordone

2016/04/20 02:32

細かいですが… ×助長→○冗長
退会済みユーザー

退会済みユーザー

2016/04/20 02:34

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

回答4

0

ベストアンサー

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

java

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

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

java

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

投稿2016/04/20 02:29

編集2016/04/22 14:48
swordone

総合スコア20649

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

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

退会済みユーザー

退会済みユーザー

2016/04/22 00:29

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

2016/04/22 06:35

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

退会済みユーザー

2016/04/22 06:53

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

2016/04/22 14:50

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

退会済みユーザー

2016/04/25 01:16

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

0

java

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

これじゃだめですかね?

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

java

1コード 2// int month は前のほうで宣言したものを再利用 3month = cal.get(Calendar.MONTH); 4for( /* ← for文の初期処理部分は省略 */ 5 ;cal.get(Calendar.MONTH) == month /* ← for文の続行判定:ループに入った時と月が同じ間だけ実行 */ 6 ;cal.add(Calendar.DATE, 1) /* ← for文の次処理準備:Calendarインスタンス「cal」の日付を翌日に進める */ 7){ 8 9 int day = cal.add(Calendar.DATE); // 何度も使うので日付の数値だけ変数に確保 10 11 // 区切りスペース出力 12 System.out.print(" "); 13 14 // dayが10未満なら10の位の文のスペース出力 15 if ( day < 10 ) System.out.print(" "); 16 17 // 日付出力 18 System.out.print(day); 19 20 // dayの曜日 == calの日付の曜日を取得・土曜日だったら開業 21 if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){ 22 System.out.println(); 23 } 24}

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

投稿2016/04/20 02:23

編集2016/04/22 07:29
tkturbo

総合スコア5572

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

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

退会済みユーザー

退会済みユーザー

2016/04/20 02:29

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

2016/04/22 07:30 編集

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

退会済みユーザー

2016/04/25 05:13

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

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

}

投稿2016/04/25 01:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

こんな感じ?

java

1int wlen = 7 - week + 1; 2for (int day = 1; day <= lastDay; ) { 3 for (int w = 0; w < wlen; ++w) { 4 int d = day + w; 5 if (d > lastDay) break; 6 System.out.printf("%2d ", d); 7 } 8 System.out.printf("\n"); 9 day += wlen; 10 wlen = 7; 11} 12

投稿2016/04/20 03:13

編集2016/04/20 03:17
HiroshiWatanabe

総合スコア2160

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

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

退会済みユーザー

退会済みユーザー

2016/04/22 00:26

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問