吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3039|回复: 19
收起左侧

[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!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 公子语凉 发表于 2020-11-22 10:54
这边 getweek 存在一个bug,星期天取模后 应该返回的是 0
苏紫方璇 发表于 2020-11-22 00:13
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 完全可以改为数组 太长了
angely 发表于 2020-11-22 09:31

编程的基础真的很重要
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 21:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表