输入年月日,判断闰年,输出是一年第几天Java源码

 第一种方法是大多数人能想到的,看起来比较笨重

import java.util.Scanner ;
public class Test1 {
	public static void main ( String [ ] args ) {
	Scanner scan = new Scanner ( System.in ) ;

	int sum = 1 ;
	while (true) {
	System.out.println("**********************************************************************") ;
	System.out.println("分别输入年份 月份 日") ;
	int year = scan.nextInt ( ) ;
	int month = scan.nextInt ( ) ;
	int day = scan.nextInt ( ) ;

	   if ( year%4 ==0 ) {
	System.out.println("该年份为闰年"+'\n') ;
	  switch(month){
	case 1 :
	  sum = 0 ; break ;
	case 2 :
	  sum = 31 ;break;
	case 3 :
	  sum = 31+29 ; break;
	case 4 :
	  sum = 31 +29+31 ;break ;
	case 5 :
	  sum = 31*2+29+30 ;break ;
	case 6 :
	  sum = 31*3 +29+30;break ;
	case 7 :
	  sum = 31*3+29+30*2;break ;
	case 8 :
	  sum = 31*4 + 29 + 30 * 2 ;break ;
	case 9 :
	  sum = 31*4 + 29 + 30 * 3 ;break ;
	case 10 :
	  sum = 31* 5 + 29 + 30 *3 ;break ;
	case 11 :
	  sum = 31* 6 + 29 + 30 * 3 ;break ;
	case 12 :
	  sum = 31 * 6 + 29 + 30 * 4 ;break ;
}	
}  
	else {
	System.out.println("这一年不是闰年"+'\n' );
	switch(month){
	case 1 :
	  sum = 0 ; break ;
	case 2 :
	  sum = 31 ;break;
	case 3 :
	  sum = 31+28 ; break;
	case 4 :
	  sum = 31 +28+31 ;break ;
	case 5 :
	  sum = 31*2+28+30 ;break ;
	case 6 :
	  sum = 31*3 +28+30;break ;
	case 7 :
	  sum = 31*3+28+30*2;break ;
	case 8 :
	  sum = 31*4 + 28 + 30 * 2 ;break ;
	case 9 :
	  sum = 31*4 + 28 + 30 * 3 ;break ;
	case 10 :
	  sum = 31* 5 + 28 + 30 *3 ;break ;
	case 11 :
	  sum = 31* 6 + 28 + 30 * 3 ;break ;
	case 12 :
	  sum = 31 * 6 + 28 + 30 * 4 ;break ;

}
}
	sum += day ;
System.out.println( "这一天是"+year+"年的第"+sum+"天"+'\n'+'\n'+'\n'+'\n' ) ;
System.out.println("**********************************************************************") ;
System.out.println("如果需要继续测试输入Y/y,如果需要结束测试输入X/x") ;

	
	while(true){
	String ctrl0= scan.next ( ) ;
	char ctrl = ctrl0.charAt(0) ;
	if (ctrl== 'Y' || ctrl =='y') break ;
	if (ctrl== 'X' || ctrl =='x') System.exit(0);
	else System.out.println("重新输入");
}
}
}
}

/*疑问:为什么不能写成
System.out.println("如果需要继续测试输入YY/yy,如果需要结束测试输入XX/xx") ;
	
	while(sum>0){
	String ctrl0= scan.next ( ) ;
	char ctrl = ctrl0.charAt(0) ;
	if (ctrl== "YY" || ctrl =="yy") break ;
	if (ctrl== "XX" || ctrl =="yy") System.exit(0);
	else System.out.println("重新输入");
	ps:从equals的角度*/

第二种是利用swith case的执行特性,先定位到对应case,如果没有break,则一直往下执行每个遇到的case语句直至程序结束

import java.util.Scanner ;
public class Test1 {
	public static void main ( String [ ] args ) {
	Scanner scan = new Scanner ( System.in ) ;

	int sum = 0 ;
/*设置一个计数器来表示是第几天*/
	while (true) {
/*循环控制条件,保证一直可以循环,利用exit自行退出程序*/
	System.out.println("**********************************************************************") ;
	System.out.println("分别输入年份 月份 日") ;
	int year = scan.nextInt ( ) ;
	int month = scan.nextInt ( ) ;
	int day = scan.nextInt ( ) ;

	   if ( year%4 ==0 ) {
	System.out.println("该年份为闰年"+'\n') ;
	  switch(month){
/*利用swith case 语句的执行特点,可以倒写case*/
	case 12 : 
	  sum = 31 ;
	case 11 : 
	  sum += 30 ;
	case 10 : 
	  sum += 31 ; 
	case 9 : 
	  sum += 30 ; 
	case 8 : 
	  sum += 31 ; 
	case 7 : 
	  sum += 30 ;
	case 6 : 
	  sum += 31 ;
	case 5 : 
	  sum += 30 ;
	case 4 : 
	  sum += 31 ;
	 case 3 : 
	  sum += 29 ; //3月加的是2月的天数
	case 2 : 
	  sum += 31 ; //2月加的是1月的天数
	case 1 :  
	  sum += 0 ; break ;
}	
}  
	else {
	System.out.println("这一年不是闰年"+'\n' );
	switch(month){
	case 12 : 
	  sum = 31 ;
	case 11 : 
	  sum += 30 ;
	case 10 : 
	  sum += 31 ; 
	case 9 : 
	  sum += 30 ; 
	case 8 : 
	  sum += 31 ; 
	case 7 : 
	  sum += 30 ;
	case 6 : 
	  sum += 31 ;
	case 5 : 
	  sum += 30 ;
	case 4 : 
	  sum += 31 ;
	 case 3 : 
	  sum += 28 ;
	case 2 : 
	  sum += 31 ;
	case 1 :  
	  sum += 0 ; break ;
}
}
	sum += day ;
System.out.println( "这一天是"+year+"年的第"+sum+"天"+'\n'+'\n'+'\n'+'\n' ) ;
System.out.println("**********************************************************************") ;

System.out.println("如果需要继续测试输入Y/y,如果需要结束测试输入X/x") ;
	while(true){
	sum = 0 ;
/*这种多次输入问题,必须在此对计数器sum重置,不然会不停累加*/
	String ctrl0= scan.next ( ) ;
	char ctrl = ctrl0.charAt(0) ;
	if (ctrl== 'Y' || ctrl =='y') break ;
	if (ctrl== 'X' || ctrl =='x') System.exit(0);
/*break使程序回到上面的输入年月日循环体*/
/*exit直接退出程序*/
	else System.out.println("重新输入");
}
}
}
}

值得注意的点是:

①sum必须初始化为0,不管在什么位置,每次循环执行都要重置。

②sum += 多少,由上一个月的天数决定。

③while(true)这种恒成立的循环体,必须自己设置一个出口。

运行结果

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值