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

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

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

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

Q&A

解決済

1回答

426閲覧

java カレンダー作成

JAVA-B1

総合スコア4

Java

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

0グッド

0クリップ

投稿2023/05/23 09:42

編集2023/05/23 15:10

実現したいこと

うるう年を考慮して、年、月、日が変更するJavaのカレンダープログラムを作成したい

前提

・整数文字列args[0],args[1], args[2]で与えられるとする
・年月日の曜日と年初からの日数を表示する
(今回は、2023年から2026年に限定したカレンダーを作成したい)

発生している問題・エラーメッセージ

理想 > java test2023 2023 9 14 2023:9:14:Thu:(257/365) > java test2023 2024 9 14 2024:9:14:Tue:(514/365) 実際 > java test2023 2023 9 14 2023:9:14:Thu:(257/365) > java test2023 2024 9 14 2024:9:14:Thu:(257/365) 問題点1 2023→2024にしても曜日が計算されない

該当のソースコード

Java

1class test2023{ 2 public static void main(String[] args){ 3 int i; 4 int[] y ={0,2023,2024,2025,2026}; 5 // jan feb mar apr may junjul aug sep oct nov dec 6 int[] m ={0,31,28,31,30,31,30,31,31,30,31,30,31}; 7 //2023年は1日が日曜日なので、Sunが配列の1番目になるよう曜日を配置 8 String[] week ={"sat","Sun","Mon","Tue","Wed","Thu","Fri"}; 9 int year =Integer.parseInt(args[0]);//年 10 int month =Integer.parseInt(args[1]);//月 11 int day =Integer.parseInt(args[2]);//日 12 int count =0;//年初からの日数 13 14 //うるう年を計算する 15 for(i=2023;i<=year;i++){ 16 if(i%400 == 0 || i%4 == 0 && i%100 != 0){ 17 } 18 19 for(i=1;i<month;i++){//前月までの日数を加える 20 count =count + m[i]; 21 } 22 count =count + day;//今月までの日数を加える 23 System.out.println(year+":"+month+":"+day+":"+week[count%7]+":("+count+"/365)"); 24 } 25 } 26} 27

補足情報(FW/ツールのバージョンなど)

forを使って順番に判別することには気づいたのですが、
どのように設定すればよいかわからないため、ご教示ください。
よろしくお願いいたします。

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

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

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

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

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

kazuma-s

2023/05/23 10:27

ソースコードの投稿に失敗しています。 class test2023{ の直前に「```Java」の行を挿入してください。 最後の } の直後に「```」の行があることを確認してください。 質問は編集できます。 投稿前に下にプレビューが表示されます。
jimbe

2023/05/23 14:09 編集

>整数文字列args[0],args[1], args[2]で与えられるとする で得た年月日とカレンダー表示に何も使っていないようですけど・・・ そもそもご提示のコードはエラーになってコンパイル・実行できません。
JAVA-B1

2023/05/23 15:16

アドバイスありがとうございます! 整数文字列が使用できていませんでした。 実行できる構文に修正したのですが、曜日を考慮できませんでした。 おそらく、曜日のためのFOR文を追加する必要があると思うのですが、 どのような文を追加すればよいのでしょうか?
guest

回答1

0

ベストアンサー

プログラムは書いてある通りに動作します。 1 つだけを出したいのなら 1 つだけを実行するようにしなくてはなりません。

2023年1月1日から指定年月日までの日数をカウントする方針であれば、年のループの中に月のループを入れて月毎の日数を(うるう年を判断しながら)加算すれば、年毎に処理を分ける必要は無いでしょう。

java

1public class Test2023 { 2 public static void main(String[] args) { 3 int year = Integer.parseInt(args[0]); 4 int month = Integer.parseInt(args[1]); 5 int day = Integer.parseInt(args[2]); 6 7 int[] lastDayOfMonth = { 31,28,31,30,31,30,31,31,30,31,30,31 }; //月の最終日 8 int total = day; //2023年1月1日からの日数 9 int dayOfYear = 0; //年初からの指定月日までの日数 10 int totalOfYear = 0; //指定年の日数 11 for(int y=2023; y<=year; y++) { 12 dayOfYear = day; 13 totalOfYear = 0; 14 for(int m=1; m<=12; m++) { 15 int lastDay = lastDayOfMonth[m-1]; 16 if(m == 2 && (y%400 == 0 || (y%4 == 0 && y%100 != 0))) { //うるう年の2月 17 lastDay++; 18 } 19 20 if(y < year || m < month) { 21 total += lastDay; 22 dayOfYear += lastDay; 23 } 24 totalOfYear += lastDay; 25 } 26 } 27 28 String[] week = { "Sun","Mon","Tue","Wed","Thu","Fri","Sat" }; 29 System.out.println(year+":"+month+":"+day+":"+week[(total-1)%7]+":("+dayOfYear+"/"+totalOfYear+")"); 30 } 31}
> java Test2023 2023 9 14 2023:9:14:Thu:(257/365) > java Test2023 2024 9 14 2024:9:14:Sat:(258/366)

投稿2023/05/23 15:20

jimbe

総合スコア12648

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

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

JAVA-B1

2023/05/24 07:06

ありがとうございます! 何度試しても、1月1日からの合計日数を出すことができず、悩んでいました・ アドバイスいただき、 無事、希望の操作を行うことができました。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問