JAVA之switch-case实现一年中的第几天

从键盘输入2022年的月和日,然后打印出这是2022年的第几天
方法一:
也是最容易想到的

import java.util.Scanner;
class SwitchCaseTest{
	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入2022年的month");
		int mon = scanner.nextInt();
		System.out.println("请输入2022年的day");
		int day = scanner.nextInt();

		int daySum = 0;
		switch(mon){
		case 1:
			daySum = day;
			break;
		case 2:
			daySum = 31 + day;
			break;
		case 3:
			daySum = 31 + 28 + day;
			break;
		case 4:
			daySum = 31 + 28 + 31 + day;
			break;
		case 5:
			daySum = 31 + 28 + 31 + 30 + day;
			break;
		case 6:
			daySum = 31 + 28 + 31 + 30 + 31 + day;
			break;
		case 7:
			daySum = 31 + 28 + 31 + 30 + 31 + 30 + day;
			break;
		case 8:
			daySum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + day;
			break;
		case 9:
			daySum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 30 + day;
			break;
		case 10:
			daySum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 30 + 30 + day;
			break;
		case 11:
			daySum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day;
			break;
		case 12:
			daySum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day;
			break;

		}
		System.out.println(2022 + "年" + mon + "月" + day + "日是第" + daySum + "天");

	}
}

但是会发现,会有很多冗余,前面加过的月份会再写一遍,那如何减少这个重复工作呢?
其实,倒过来就可以精巧的实现
方法二:

import java.util.Scanner;
class SwitchCaseTest{
	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入2022年的month");
		int mon = scanner.nextInt();
		System.out.println("请输入2022年的day");
		int day = scanner.nextInt();
	    
	    int daySum = 0;
		switch(mon){
		case 12:
			daySum += 30;
		case 11:
			daySum += 31;
		case 10:
			daySum += 30;
		case 9:
			daySum += 31;
		case 8:
			daySum += 31;
		case 7:
			daySum += 30;
		case 6:
			daySum += 31;
		case 5:
			daySum += 30;
		case 4:
			daySum += 31;
		case 3:
			daySum += 28;
		case 2:
			daySum += 31;
		case 1:	
			daySum += day;
		}
		System.out.println(2022 + "年" + mon + "月" + day + "日是第" + daySum + "天");
	}
}

小总结
由于switch-case里面break语句是可选的,如果不写break就会执行满足条件的case以及之后的所有语句,这里正好是利用了这个特性,实现了一个累加操作。


版权声明:本文为weixin_42496486原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。