吾愛破解 - LCG - LSG |安卓破解|病毒分析|huihengkj.com

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 1001|回復: 18

[Java] 上班一年了,回歸一下初心!Java基礎

  [復制鏈接]
公子語涼 發表于 2020-11-21 23:28
輸入日期,輸出日期對應的 星期
[Java] 純文本查看 復制代碼
import java.math.BigDecimal;
import java.util.Scanner;

public class Demo03
{
    public static void main(String[] args) {
        int[] date = new int[3];
        Scanner sc = new Scanner(System.in);
        try {
            for (int i = 0; i < date.length; i++) {
                System.out.println("請輸入" + (i == 0 ? "年(1-100000)" : i == 1 ? "月(1-12)" : "日(根據實際判斷)") + ":");
                date[i] = sc.nextInt();
            }
            MyDate md = MyDate.getInstance(date[0], date[1], date[2]);
            System.out.println(md.year + "年" + md.month + "月" + md.day + "日是:" + md.getWeek());
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

}

class MyDate
{
    // 實列
    private static MyDate md = new MyDate();

    // 類變量
    public static int year;
    public static int month;
    public static int day;

    // 單列設計模式
    private MyDate() {
        super();
    }

    // 獲取實列對象
    public static MyDate getInstance(int year, int month, int day) {
        md.isUseDay(year, month, day);
        MyDate.year = year;
        MyDate.month = month;
        MyDate.day = day;
        return md;
    }

    // 獲取星期
    public String getWeek() {
        switch (getTotalDay() % 7) {
            case 1:
                return "星期一";
            case 2:
                return "星期二";
            case 3:
                return "星期三";
            case 4:
                return "星期四";
            case 5:
                return "星期五";
            case 6:
                return "星期六";
            case 7:
                return "星期日";
        }
        throw new RuntimeException("抱歉,出錯了 ~~");
    }

    // 獲取總共相差多少天
    private int getTotalDay() {
        int td = 0;
        // year 年過去的天數
        for (int i = 1; i <= month; i++) {
            if (i != month) {
                td += getMonthDay(year, i);
            }
            else {
                td += day;
            }
        }
        // 除 year 年以前過去的天數
        for (int i = 1; i < year; i++) {
            for (int j = 1; j <= 12; j++) {
                td += getMonthDay(i, j);
            }
        }
        return td;
    }

    // 判斷 天數是否有效
    private void isUseDay(int year, int month, int day) {
        isUseYear(year);
        isUseMonth(month);
        int d = getMonthDay(year, month);
        if (!(new BigDecimal(day).compareTo(new BigDecimal("0")) > 0
                && new BigDecimal(day).compareTo(new BigDecimal(d)) <= 0)) {
            throw new RuntimeException("日期輸入有誤!");
        }
    }

    // 判斷是否 有效年
    private void isUseYear(int year) {
        if (!(new BigDecimal(year).compareTo(new BigDecimal("0")) > 0
                && new BigDecimal(year).compareTo(new BigDecimal("100000")) <= 0)) {
            throw new RuntimeException("年份輸入有誤!");
        }
    }

    // 判斷 是否 有效月
    private void isUseMonth(int month) {
        if (!(new BigDecimal(month).compareTo(new BigDecimal("0")) > 0
                && new BigDecimal(month).compareTo(new BigDecimal("12")) <= 0)) {
            throw new RuntimeException("月份輸入有誤!");
        }
    }

    // 獲取當年當月天數
    private int getMonthDay(int year, int month) {
        switch (month) {
            // 大月
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                return 31;
            case 4:
            case 6:
            case 9:
            case 11:
                return 30;
            case 2:
                if (isRunNian(year)) {
                    return 29;
                }
                return 28;
        }
        throw new RuntimeException("抱歉,出錯了 ~~");
    }

    // 判斷是否是閏年
    private boolean isRunNian(int year) {
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0 && year % 3200 != 0) || year % 172800 == 0) {
            return true;
        }
        return false;
    }
}

免費評分

參與人數 8吾愛幣 +15 熱心值 +7 收起 理由
T-timo + 1 + 1 熱心回復!
4-SR + 1 + 1 熱心回復!
哇卡s + 1 + 1 熱心回復!
Safety010 + 1 + 1 我很贊同!
小珉 + 1 + 1 謝謝@Thanks!
蘇紫方璇 + 7 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
土味挖掘機 + 1 + 1 謝謝@Thanks!
hacksz + 2 謝謝@Thanks!

查看全部評分

發帖前要善用論壇搜索500彩票邀请码功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

 樓主| 公子語涼 發表于 2020-11-22 10:54
這邊 getweek 存在一個bug,星期天取模后 應該返回的是 0
蘇紫方璇 發表于 2020-11-22 00:13
LL22 發表于 2020-11-21 23:47
goblin0427 發表于 2020-11-22 00:09
新手前來學習
805141715 發表于 2020-11-22 00:16
不錯不錯,小白前來膜拜
rainbow270118 發表于 2020-11-22 01:35
可以當做筆記用了
bennyt 發表于 2020-11-22 01:57
編程的基礎真的很重要。
hooing 發表于 2020-11-22 02:01
看了代碼才知道公元1年1月1日是星期一,真是冷知識
孤狼微博 發表于 2020-11-22 02:14
真是初心,后面就直接用封裝好的了
QingYi. 發表于 2020-11-22 08:19
switch 完全可以改為數組 太長了
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:本版塊禁止灌水或回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|處罰記錄|聯系我們|吾愛破解 - LCG - LSG ( )

GMT+8, 2020-11-24 19:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表

500彩票邀請碼-彩經網