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

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

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

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

Q&A

2回答

4957閲覧

Javaでのカレンダー表示

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2018/08/04 01:40

Javaでの1年分のカレンダー作成、表示方法がわかりません。

「課題の内容と条件」

・Calendarクラスや一切のimportの使用禁止。

・1月1日を日曜日からスタートし、1月31日が火曜日で終わるので、水木金土の空白を作り、続く2月のカレンダーは日月火の空白を設け水曜日の位置から1日をスタートさせる。以下その手順を12月まで。

・例外処理、うるう年判定、ツェラーの公式は使わない。

・クラス分けして、メインメソッドから呼び出す方式。

「できたこと」

・31日までの月、30日までの月、28日までの月の表示方法を3つのメソッドに分け呼び出し、1年分のカレンダーを表示する。

・2重for文とif分の組み合わせで、同じように1年分のカレンダーを表示する。

しかし、私ができたことは「違う」らしいのです。

「悩んでいる点」

・結局は空白を表現できず、曜日と日付がどうしても合わせられない(ずらせられない?)。毎月1日が日曜日から始まるカレンダーしか作れないという点です。

おそらく実務的には使われない書き方だと思うのですが、何卒打開策をご教授お願い致します。

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

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

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

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

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

Orlofsky

2018/08/04 01:54

Java カレンダー などのキーワードでぐぐれば参考になるコードが見つかるかも? 書いている途中でも質問にコードを載せないとまともなアドバイスをもらうのは難しいのでは?
退会済みユーザー

退会済みユーザー

2018/08/04 01:59

ありがとうございます!そうですよね。私自身まだ全然方向性が定まってないのですが、やってみます!
m.ts10806

2018/08/04 02:29

「課題」とあるので非推奨の流れかと。課題、宿題代行サイトではありませんので。
m.ts10806

2018/08/04 02:31

現在提示された内容だけではどのようなコードになっているか質問者さん以外は分かりません。完成していなくてもコードを提示することで質問者さんが分かっていること、いないことがコードから読み取れます。(もちろんその上で説明はすべきです)
退会済みユーザー

退会済みユーザー

2018/08/04 02:34

そうですね!ごもっともです。初めての質問で、失礼な質問の仕方でした。ただいま出先のためすぐに取り掛かれない状況で、一度私なりの方向性のコードを上げてみます。本当にすいませんでした。
guest

回答2

0

java

1 2// 課題 3//・Calendarクラスや一切のimportの使用禁止。 4// 5//・1月1日を日曜日からスタートし、 6// 1月31日が火曜日で終わるので、水木金土の空白を作り、 7// 続く2月のカレンダーは日月火の空白を設け 8// 水曜日の位置から1日をスタートさせる。 9// 以下その手順を12月まで。 10// 11//・例外処理、うるう年判定、ツェラーの公式は使わない。 12// 13//・クラス分けして、メインメソッドから呼び出す方式。 14 15 public static void main(String[] args) { 16 17 //1月から12月のカレンダーを表示する 18 for (int i = 1; i <= 12; i++) { 19 func(i); 20 if (i < 12) { 21 //毎月行端と月の区切りで計2行改行 22 System.out.println(); 23 System.out.println(); 24 } 25 } 26 } 27 28

java

1 //※条件1月1日が日曜日から合計日数で求める 2 //month月1日の曜日を0-6の数値で返す 3 public static int youbi(int month) { 4 5 int sum = 0; 6 for (int i = 1; i <= month - 1; i++) { 7 for (int j = 1; j <= 31; j++) { 8 if (i == 2) { 9 if (j >= 29) { 10 continue; 11 } 12 } else if (i == 4 || i == 6 || i == 9 || i == 11) { 13 if (j >= 31) { 14 continue; 15 } 16 } 17 sum++; 18 } 19 } 20 return sum % 7; 21 } 22

java

1 //month月のカレンダーを出力する 2 public static void func(int month) { 3 4 String[] Week = { "日", "月", "火", "水", "木", "金", "土" }; 5 6 //月の表示 7 System.out.println(month + "月"); 8 9 //曜日の表示 10 for (String i : Week) 11 System.out.print(i); 12 System.out.println(); 13 14 //month月1日の曜日をyoubiメソッドから求める 15 //youbiメソッドで得た値分マイナスからスタートさせ月初の曜日をずらす 16 //その後は月初から月末までの日を土曜日で折り返して出力させる 17 int count = 0; 18 for (int i = 1 - youbi(month); i <= 31; i++) { 19 count++; 20 if (i < 1) { 21 System.out.print(" "); 22 continue; 23 } 24 //2月は28日で終了 25 if (month == 2) { 26 if (i >= 29) { 27 continue; 28 } 29 //4月6月9月11月は30日で終了 30 } else if (month == 4 || month == 6 || month == 9 || month == 11) { 31 if (i >= 31) { 32 continue; 33 } 34 } 35 //その他は31日までで終了 36 37 //日付を出力 38 System.out.printf("%02d", i); 39 40 //月初の空白を含む7日毎に(土曜日で)改行 41 if (count % 7 == 0) 42 System.out.println(); 43 } 44 }

出力結果

イメージ説明


追加修正しました

1-12月までの出力(main()のfor文のi=1を変えれば月指定出来ます)
月末日の処理が間違っていたので修正しました

投稿2018/08/04 05:11

編集2018/08/04 08:21
opyon

総合スコア1009

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

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

m.ts10806

2018/08/04 05:13

コードブロック内では他のマークダウンは一切無効になりますので。
opyon

2018/08/04 05:24

コード書くの不慣れで申し訳ございません。 for分とif分しか使ってないので見にくいと思います。 なんとか動いたので回答とさせていただきました。 ※別の回答でchankaneさんが書かれていた内容をヒントに作りましたが、配列は使ってません。 ①まずn月1日の曜日を求めるメソッドを作り ②次にその求めた曜日分ループカウンタをマイナススタートさせます  例えば1月の日曜日なら0なのでそのまま1から  例えば2月の水曜日なら3なので1-3=-2から  そうすることで-2 -1 0 とループするのでそこをif分で空白出力させることで  最初の週を空白でスタートさせられます ③残りは全体のカウンターで+1づつして7になったら改行して次の週以降繰り返し表示するだけです 自分でも良い課題だなと思ったので作ってみましたがとても勉強になりました。 もっとスマートに書けるはずなので別の方の回答も見てみたいですね。 そのまま使うよりも何かしらのヒントになればと思います。
m.ts10806

2018/08/04 05:32

今の画像コードをコードブロック外に出してみて、それでも反映されないようでしたら編集時にもう一度添付されては?
opyon

2018/08/04 05:44

mts10806さんご助言ありがとうございます。 添付ファイル貼り付けることが出来ました。
opyon

2018/08/04 08:16 編集

補足 2月と31日の月と30日の月でメソッドを分けるならif分の条件のところで分けられるはずです。 全部要件満たしてしまうと課題にならないと思うのでご自分でも作ってみてください。
guest

0

いまいち詳細がわかりませんが,

Java

1int startDay; // Sun = 0, Mon = 1...

という変数を用意し,表示する関数に,この値を考慮してみてはどうでしょうか?
具体的には,

Java

1String[] grid = new String[6*7]; 2int startDay; // Sun = 0, Mon = 1...

というフィールドを持ち

Java

1/** 2 * @param lastDate その月の最後の日付 3 */ 4private void print(int lastDate){ 5 for(int j=0 ; j<6 ; j++){ 6 for(int i=0 ; i<7 ; i++){ 7 grid[j * 7 + i] = "-"; 8 } 9 } 10 11 for(int i=0 ; i<lastDate ; i++){ 12 grid[i + startDay] = String.valueOf(i); 13 } 14}

という風に自分ならかきますね

投稿2018/08/04 02:04

chankane

総合スコア139

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問