• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:java Calendar作成)

Javaでカレンダーを作成する方法

このQ&Aのポイント
  • Javaでカレンダーを作成する方法についての質問です。
  • カレンダーの表示イメージや、土曜日ごとに改行する方法がうまく動作しません。
  • どのように修正すれば良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

> java.util.Calendar.SATURDAY ああ、この定数で判定したいと言う事ですか。 > if (((day-1+week-1) % 7)==6) -1と-1も纏めると「if (((day+week-2) % 7)==(java.util.Calendar.SATURDAY-1))」 ちなみに(java.util.Calendar.SATURDAY-1)もゼロスタートとして計算してます。 下記は簡単ですね。 > if (j<7) 「if (j<java.util.Calendar.SATURDAY)」

noname#220630
質問者

お礼

まだなんとなくではありますが、掴めて来た気がいたします! ありがとうございました><

その他の回答 (5)

回答No.5

「%」で"あまり"を計算する場合の有用性としては「if (((day-1+week-1) % 7)==6)」のような計算式でカウンターがリセットできない場合に必要となります。 「j = day-1+week-1;」と変数 j に代入しても、この場合 結局 変数 j もリセットしてはいけません。

noname#220630
質問者

お礼

うう・・・まだ半分ほど頭の中がクエスチョンマークでいっぱいです・・・! あの、恐らくものすごく基本的なことをよろしければ教えていただきたいのですが、 「if (((day-1+week-1) % 7)==6)」で、余りが6なのは何故なのでしょうか・・・?? 現在==7(土曜日はCalendar.get(DAY_OF_WEEK)で7だから)ということで頭が凝り固まっているのです;

回答No.4

> この場合、変数 j は 1 スタートになってます。 これはループのロールバック時にカウンターがリセットされた値の事です。 つまり、下記の「j=1;」の事です。 > if (j<7) { > j++; > }else{ > j=1; > System.out.println(""); > }

noname#220630
質問者

お礼

この部分については理解出来たように思います、ありがとうございます!

回答No.3

回答例(2) こちらは変数 j を本当にカウンターとして使っています。 こちらは「%」で"あまり"を計算していないのでゼロスタートにする必要はありません(「%」で"あまり"を計算する場合はゼロスタートにする必要があります)。 この場合、変数 j は 1 スタートになってます。 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; int j = week; //1日から月末日まで、カレンダーを表示する for (int day = 1 ; day <= lastDay ; day ++) { empty = ""; if (day < 10) { empty = "_"; } System.out.print( empty + day + "_"); if (j<7) { j++; }else{ j=1; System.out.println(""); } } } }

noname#220630
質問者

お礼

%であまりを意識する際は0スタートであるということも存じませんでした・・・ 一つ賢くなれました、教えてくださりありがとうございます!

回答No.2

以前のプログラムにヒントがありますよ。 なぜ以前のプログラムでループ用カウンターを2つ使っていたのかと言う事です。 このプログラムでは変数 j を使っていますが、変数 j を使わずに、直に if 文の中に「if (((day-1+week-1) % 7)==6)」と記述しても、(見た目はカウンターは1つでも)結局2つの「カウンター値」を使っていると言うことになります。 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; int j; //1日から月末日まで、カレンダーを表示する for (int day = 1 ; day <= lastDay ; day ++) { empty = ""; if (day < 10) { empty = "_"; } System.out.print( empty + day + "_"); //day も week もゼロスタートにして加算。 j = day-1+week-1; if ((j % 7)==6) { System.out.println(""); } } } }

noname#220630
質問者

お礼

またもご回答くださり、誠にありがとうございます。 少し時間を掛けてじっくり理解させていただきます>< 本当にありがとうございます!

  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.1

私はこのように7回回しています。 if(startDay!=7) for(int i=1 ;i<startDay;i++) System.out.print(" ");  1日までのスペース int x=1; for(int i=startDay;i<=7;i++) {     1週めの表示 if(x<10) System.out.print(" "); System.out.print(" "+x); x++; } System.out.println(""); for(int j=1;j<7;j++){    2週目以降の表示 for(int k=0;k<7;k++){  日曜から土曜まで7回まわす if(x<=lastDay){    最終日以降は表示しない if(x<10) System.out.print(" "); System.out.print(" "+x); x++; } } System.out.println(""); }

noname#220630
質問者

お礼

ご回答ありがとうございます。

noname#220630
質問者

補足

せっかくお答えいただいたのに申し訳ないのですが、知りたいのはあくまで元の文を出来るだけ残しつつ、●部分のif分、右辺が土曜日の状態での判定のやり方なのでございます・・・

関連するQ&A