java捕鱼设计_java实现渔夫打鱼晒网

package com.example.demo.sample;

import java.util.Scanner;

/**

* Desc :如果一个渔夫从 2015 年 1 月 1 日开始每三天打一次渔,两天晒一次网,编程实现当输入 2015 1 月 1 日以后的任意一天,输出该渔夫是在打渔还是在晒网。

*

* @author : GaoQiao

* @date : 2019-05-22

*/

public class FisherMan {

/**

* 技术要点:

*

* 本实例主要有以下两个技术要点:

*

* (1) 判断输入的年份(2015 年以后包括 2015 年)是否为闰年,这里自定义函数 leap() 来进行判断。该函数的核心内容就是闰年的判断条件即能被 4 整除但不能被 100 整除,或能被 400 整除。

*

* (2) 求输入日期距 2015 年 1 月 1 日有多少天。首先判断 2015 年距输入的年份有多少年,这其中有多少年是闰年就将 sum 加多少个 366,有多少年是平年便将 sum 加上多少个 365。

*

* 其次要将 12 个月每月的天数存到数组中,因为闰年 2 月份的天数有别于平年,故采用两个数组 a 和 b 分别存储。若输入年份是平年,月份为 m 时就在前面累加日期的基础上继续累加存储着平年每月天数的数组的前 m-1 个元素,将累加结果加上输入的日期便求出了最终结果。闰年的算法类似。

*

* @param args

*/

public static void main(String[] args) {

FisherMan fisherMan = new FisherMan();

int year = 2019;

int month = 05;

int day = 20;

for (int i = 0; i < 7; i++) {

int n = fisherMan.number(year, month, day);

// 余数是1或2或3时说明在打渔,否则在晒网

if ((n % 5) < 4 && (n % 5) > 0) {

System.out.println("日期[" + year + "年+" + month + "年" + day + "号],你在打鱼。\n");

} else {

System.out.println("日期[" + year + "年+" + month + "年" + day + "号],你在晒网。\n");

}

day++;

}

}

/**

* 自定义函数leap()用来指定输入的年份是否为闰年

*

* @param years

* @return

*/

int leap(int years) {

if (years % 4 == 0 && years % 100 != 0 || years % 400 == 0) {

// 闰年

return 1;

}

// 平年

return 0;

}

/**

* 自定义函数 number() 计算输入日期距2011年1月1日共有多少天

*

* @param year

* @param month

* @param day

* @return

*/

int number(int year, int month, int day) {

int sum = 0, i, j, k;

// 数组a存放平年每月的天数

int[] a = {

31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31

};

// 数组b存放闰年每月的天数

int[] b = {

31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31

};

// 判断是否为闰年

if (leap(year) == 1) {

for (i = 0; i < month - 1; i++) {

// 是闰年,累加数组b前m-1个月份的天数

sum += b[i];

}

} else {

for (i = 0; i < month - 1; i++) {

// 不是闰年,累加数组a前m-1个月份的天数

sum += a[i];

}

}

for (j = 2015; j < year; j++) {

if (leap(j) == i) {

// 2011年到输入的年份是闰年的加366

sum += 366;

} else {

// 2011年到输入的年份不是闰年的加365

sum += 365;

}

}

// 将前面累加的结果加上日期,求出总天数

sum += day;

// 返回计算的天数

return sum;

}

}

输出结果:

日期[2019年+5年20号],你在晒网。

日期[2019年+5年21号],你在打鱼。

日期[2019年+5年22号],你在打鱼。

日期[2019年+5年23号],你在打鱼。

日期[2019年+5年24号],你在晒网。

日期[2019年+5年25号],你在晒网。

日期[2019年+5年26号],你在打鱼。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值