zl程序教程

您现在的位置是:首页 >  Java

当前栏目

第十四届蓝桥杯集训——switch——配套用法示例

2023-02-18 16:33:37 时间

第十四届蓝桥杯集训——switch——配套用法示例


示例题目:

计算某年某月某日有多少天?

输入三个变量,变量year代表年份,变量month代表月份,变量day代表当月的天数。

取值范围:1853>=year<=2050;0>month<=12;0>day<=31(大月);0>day<=30(小月);day={28,29}(二月)。

取值范围说明:【1853年格里高利历颁布,1853年前没有平年和闰年之分。】

输入示例1:

1853 12 31

输出示例1:

365

输入示例2:

2020 3 1

输出示例2: 

61

为了方便测试,我们先写固定的数据,我们测试数据1,因为计算正确平年肯定是365天。

分析过程:

1、月份与天数是累计的关系,大月31天,小月30天,二月份闰年29天、平年28天。

2、判断如年平年

3、使用switch进行倒序累计,有对应的月份向1月份进行累计,最后累加当月日期。

4、根据输入范围确定,可以去掉switch的default进行计算,不会出现月份异常。

package com.item.action;

public class Main {

	public static void main(String args[]) {
		// 年份用于判断是否闰年
		int year = 1983;
		// 月份用于累加月份天数
		int month = 12;
		// 日期用于最终天数
		int day = 31;
		// 数量用于累计
		int count = 0;
		// 通过月份进行检索
		switch (month) {
		case 12:
			count += 30;
		case 11:
			count += 31;
		case 10:
			count += 30;
		case 9:
			count += 31;
		case 8:
			count += 31;
		case 7:
			count += 30;
		case 6:
			count += 31;
		case 5:
			count += 30;
		case 4:
			count += 31;
		case 3:
			// 判断闰年与否
			if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
				count += 29;
			} else {
				count += 28;
			}
		case 2:
			// 二月份开始累计1月份天数
			count += 31;
		case 1:
			// 累计最后一天
			count += day;
			// 计算到最后一个月份就停止。
			break;
		}
		// 输出结果
		System.out.println(count);
	}
}

输出效果:

使用扫描器输入变量效果:

package com.item.action;

import java.util.Scanner;

public class Main {

	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		// 年份用于判断是否闰年
		int year = sc.nextInt();
		// 月份用于累加月份天数
		int month = sc.nextInt();
		// 日期用于最终天数
		int day = sc.nextInt();
		sc.close();
		// 数量用于累计
		int count = 0;
		// 通过月份进行检索
		switch (month) {
		case 12:
			count += 30;
		case 11:
			count += 31;
		case 10:
			count += 30;
		case 9:
			count += 31;
		case 8:
			count += 31;
		case 7:
			count += 30;
		case 6:
			count += 31;
		case 5:
			count += 30;
		case 4:
			count += 31;
		case 3:
			// 判断闰年与否
			if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
				count += 29;
			} else {
				count += 28;
			}
		case 2:
			// 二月份开始累计1月份天数
			count += 31;
		case 1:
			// 累计最后一天
			count += day;
			// 计算到最后一个月份就停止。
			break;
		}
		// 输出结果
		System.out.println(count);
	}
}

这种switch用法还是比较有效的,这算是一种结构使用的技巧,为后续我们自行探解解题技巧提供了一定的思维方向。