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

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

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

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

2回答

2558閲覧

javaでのカレンダー作成応用課題がわかりません

PCHK

総合スコア7

Java

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2017/11/10 05:17

###前提・実現したいこと
学校の課題にて2017年から2019年までのカレンダーをjavaで作成するというものが出ました。日にちはしっかりと表示されるようになったのですが、曜日と正月から何日経ったかの表示がうまくいきません。それを表示できるようにしたいです。

###発生している問題・エラーメッセージ
2018・1・1は実際は月曜であるのに火曜と表示される。
2018・1・1は[1/365]であるのに[366/365]と表示される。

###該当のソースコード
class PCHK1 {
public static void main (String[] args){
int i;
int year = Integer.parseInt(args[0]);
int month=Integer.parseInt(args[1]);
int day=Integer.parseInt(args[2]);
int[] m={0,31,28,31,30,31,30,31,31,30,31,30,31};
int count = 1;

if ( year==2017 ){ String[] week= {"Sat","Sun","Mon","Tue","Wed","Thu","Fri"}; for(i=1; i<month; i++){ count=count+m[i]; } count=count + (year-2017)*365; System.out.println("2017:"+month+":"+day+":"+week[count%7]+":("+count+"/365)"); } else if ( year==2018 ){ String[] week= {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; for(i=1; i<month; i++){ count=count+m[i]; } count=count + (2018-2017)*365; System.out.println("2018:"+month+":"+day+":"+week[count%7]+":("+count+"/365)"); } else if ( year==2019 ){ String[] week= {"Mon","Tue","Wed","Thu","Fri","Sat","Sun"}; for(i=1; i<month; i++){ count=count+m[i]; } count=count + (2019-2017)*365; System.out.println("2019:"+month+":"+day+":"+week[count%7]+":("+count+"/365)"); } }

}
###試したこと
色々試していますが、なかなかできません。

###補足情報(言語/FW/ツール等のバージョンなど)
MacBookAir
tool:mi
ターミナル(MacBook搭載)

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

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

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

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

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

LouiS0616

2017/11/10 05:37

teratailには、コードを見やすく表示する機能があります。編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
fuzzball

2017/11/10 05:38

「正月からの経過日」は、コードを見ると2017年の正月からの経過日数を求めているように見えます。「その年の正月から」と「2017年の正月から」のどちらが正しいのでしょうか?
PCHK

2017/11/10 05:54

LouiS0616さん、ありがとうございます。
PCHK

2017/11/10 05:55

fuzzballさん、その年の正月からです!わかりにくくて申し訳ないです。
swordone

2017/11/10 06:07

Calendarクラスなどは使用不可ですか?
guest

回答2

0

ベストアンサー

例えば2018年の場合、

java

1count=count + (2018-2017)*365;

この加算をしてしまうと、countは2017年の正月からの経過日数になってしまいます。
その状態で2018年用の曜日テーブルである、

java

1String[] week= {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

を使用しているために曜日もずれてしまっています。

「その年の正月からの経過日数」の場合

「年」に対する日数を加算する必要はありませんので、count=count + (2018-2017)*365;を削除すればいいです。

「2017年の正月からの経過日数」の場合

「年」に対する日数の加算はそのままでかまいません。
countは2017年の正月からの経過日数ですので、曜日テーブルも2017年用を使えばいいです。

投稿2017/11/10 05:33

編集2017/11/10 05:46
fuzzball

総合スコア16731

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

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

fuzzball

2017/11/10 06:22

他にもバグってるから、このまま提出しないようにw
guest

0

Java

1// ここを1ではなく0にする 2int count = 1;

Java

1// 各年のifの中の以下の部分を 2count=count + (year-2017)*365; 3count=count + (2018-2017)*365; 4count=count + (2019-2017)*365; 5 6// 全てこうする 7count = count + day;

以下に、答え合わせ用のコードを置いときます。
この出力結果と同じであれば正解です。

Java

1LocalDate date = LocalDate.of(year, month, day); 2String formattedDate = date.format(DateTimeFormatter.ofPattern("u:M:d:E", Locale.ENGLISH)); 3System.out.println(formattedDate + String.format(":(%d/365)", date.getDayOfYear()));

投稿2017/11/10 06:35

編集2017/11/10 08:14
root_jp

総合スコア4666

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

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

swordone

2017/11/10 07:23

最後LocalDateで良かったのでは?
root_jp

2017/11/10 08:15

全くもってTimeの部分は不要でした。。。 格好悪いので直しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問