Kenta-K
@Kenta-K

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Javaの標準入力で任意の年月日を指定して曜日を出力

解決したいこと

ここに解決したい内容を記載してください。

Javaの標準入力で任意の年月日を指定した際に
曜日を出力させたいが
実際に試してみると ずれている(間違っている)

2021年7月31日を指定すると金曜日になる
2021年6月1日を指定すると月曜日になるなど
曜日が一つ手前にずれてしまいます

該当するソースコード

言語名 Java
ソースコードを入力

public class Year02 {
public static void main(String[] args) {
System.out.println("西暦y年m月d日は〇曜日でしょう");
int year = inputInt("西暦y年");
int month = inputInt("m月");
int date = inputInt("d日");

    // 西暦1601年1月1日からの通算日数を求める
    int totalDays = 0;
    for (int y = 1601; y < year; y++) {
        totalDays = totalDays + 365; // 1年=365日
        if (isLeapYear(y)) {
            totalDays++; // 閏年は+1日
        }
    }
    for (int m = 1; m < month; m++) {
        switch (m) {
        case 2:
            totalDays += 28;
            if (isLeapYear(year)) {
                totalDays++;
            }
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            totalDays += 30;
            break;
        default:
            totalDays += 31;
            break;
        }
    }
    totalDays += date;

    // Helper.printString((totalDays % 7)+ "曜日");
    char[] weekDay = {'土','日', '月', '火', '水', '木', '金' };
    System.out.println("⇒" + weekDay[totalDays % 7] + "曜日");
}

// 閏年判定
public static boolean isLeapYear(int year) {
    return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}

// プロンプト(入力促進メッセージ)を表示して入力した整数を返す
public static int inputInt(String prompt) {
    System.out.print(prompt);
    int inp = new java.util.Scanner(System.in).nextInt();
    return inp;
}

}

0

1Answer

2021年7月31日を指定すると金曜日になる
2021年6月1日を指定すると月曜日になるなど
曜日が一つ手前にずれてしまいます

曜日の配列が土曜スタートになっているからではないでしょうか。

char[] weekDay = {'土','日', '月', '火', '水', '木', '金' };

1601年1月1日は実際は月曜ですので、1601年1月1日でのtotalDaysの値(=1)の時にweekDay[totalDays % 7]の結果が月曜になるよう

char[] weekDay = {'日', '月', '火', '水', '木', '金', '土'};

とすればいいように思います。

0Like

Comments

  1. @Kenta-K

    Questioner

    ありがとうございます
    なんとか解決しました

Your answer might help someone💌