Java 求闰年 (细细品味if语句分开写和合到一起写得到的不一样的结果)

el/2024/4/13 14:29:21
package cn.nrsc.demo;
/** 关卡3  训练1* 定义一个方法,去打印指定两个年份之间所有的闰年年份如:将2000和2005传入方法,方法执行完毕会打印出这段之间的所有闰年年份2000和2004提示:计算公历年闰年的算法: 四年一闰,百年不闰,四百年再闰翻译:满足如下任意一条即使如年1)年份是整百数的必须是400的倍数才是闰年2)其他年份能被4的是闰年实例: 2000 是整百数,并且是400的倍数所以是闰年; 2004年是4的倍数是闰年2100 是整百的倍数但不是400的倍数,所以不是闰年* */
import java.util.Scanner;public class Test1_XunZhaoRuiNian {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请制定第一个年份:");int year1 = sc.nextInt();System.out.println("请制定第二个年份:");int year2 = sc.nextInt();ruiNian(year1, year2);}public static void ruiNian(int a, int b) {int min = a < b ? a : b;int max = a > b ? a : b;System.out.println("第一种方法:");//这里特别值得品味................................................for (int i = min; i <= max; i++) {/**这种方式得不到想要的结果,比如说当i=2100(非闰年)时i%400==0不满足条件 *将执行else语句,而else里面的if语句是满足条件的,所以会把2100当成瑞年进行输出*/// if (i % 100 == 0 && i % 400 == 0) { // System.out.println(i);              // } else {                          // if (i % 4 == 0) {// System.out.println(i);// }// }/*相比于上面的方式,下面的方式当i=2100(非瑞年)时,由于i%100==0为真,* 所以会继续执行if (i % 400 == 0),此时i % 400 == 0为假,* 不会执行任何其他的语句,更不可能跳到else语句,所以这种方式可以得到所有真正的瑞年*/if (i % 100 == 0) {// 1)年份是整百数的必须是400的倍数才是闰年if (i % 400 == 0) {System.out.println(i);}} else {// 2)其他年份能被4的是闰年if (i % 4 == 0) {System.out.println(i);}}}/*i % 4 == 0 && i % 100 != 0 || i % 400 == 0* 第一句:可以得到所有被4整除的数;* 第二句:相当于排除了所有年份为整百数的年份;* 第三句:又把年份为整百数的年份中可以被400整除的年份给弄了回来.* 所以这种方式也可以得到所有真正的瑞年                       */System.out.println("第二种方法:");for (int i = min; i <= max; i++) {if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {System.out.println(i);}}}
}

http://www.ngui.cc/el/1113867.html

相关文章

Java输入满足条件的字符窜,并将其返回 密码设置成包含(A-Z)或空格的形式(空格不能作为密码的开头)

package cn.nrsc.demo; /** 作者认为本程序的重点在以下三个方面: 1. 细细品味while(true){}和break的结合 2. 细细品味自己当时是如何利用下面的语句完成"将密码设置成包含(A-Z)或空格的形式(空格不能作为密码的开头)"这个条件的界定的 ((int) (mima[i]) > 90 ||…

Java数组元素查找 接收并打印一个未知长度的数组

package cn.nrsc.demo;import java.util.Scanner; //****************************************************************************// //作者认为该程序最主要的功能是可以实现<<接收并打印一个未知长度的数组>>的效果 // //*********************************…

成员变量 全局变量 静态方法 非静态方法 内存图解

//成员变量和全局变量 /*成员变量和局部变量的区别?A:在类中的位置不同成员变量&#xff1a;在类中方法外局部变量&#xff1a;在方法定义中或者方法声明上B:在内存中的位置不同成员变量&#xff1a;在堆内存局部变量&#xff1a;在栈内存C:生命周期不同成员变量&#xff1a;随…

java 把一个未知长度的字符串中的某个子字符串全部改成另一个字符串

package cn.nrsc.test;/** 功能:把一个未知长度的字符串中的某个子字符串全部改成另一个字符串,*/ import java.util.ArrayList;public class gaibian_ZhuBaJietoZhuWuNeng {public static void main(String[] args) {String str "猪八戒发觉老猪八戒骥伏 枥块撒 风浪…

Java (1)寻找一堆数字中只出现一次的数字 (2)统计一堆文件后缀名共有几种类型(即统计一堆数字中出现过那几个数字)

//*************(1)寻找一堆数字中只出现一次的数字***********package cn.nrsc.test1;import java.util.ArrayList;//设计一个方法&#xff0c;传入一个int类型数组&#xff0c;输出这个数组中只出现一次的数字。 public class OnlyOnce {public static void main(String[] ar…

多态 多态中的成员(成员变量、构造方法、成员方法、静态方法)访问特点

/*多态&#xff1a;同一个对象(事物)&#xff0c;在不同时刻体现出来的不同状态。举例&#xff1a;猫是猫&#xff0c;猫是动物。水(液体&#xff0c;固体&#xff0c;气态)。多态的前提&#xff1a;A:要有继承关系。B:要有方法重写。其实没有也是可以的&#xff0c;但是如果没…

抽象类和接口作为形式参数 多态 抽象类和接口虽然都不能直接创建对象,但是可以通过多态进行对象的创建

/*抽象类和接口作为形式参数&#xff1a;抽象类:需要的是该抽象的类子类对象 接口:需要的是该接口的实现类(或者说子类也可行)对象//下面这句话一定要理解并记住://抽象类和接口虽然都不能直接创建对象,但是可以通过多态进行对象的创建... */ //************抽象类作为形式参数…

局部内部类 局部内部类访问局部变量必须用final修饰

/*局部内部类A:可以直接访问外部类的成员B:在局部位置&#xff0c;可以创建内部类对象&#xff0c;通过对象调用内部类方法&#xff0c;来使用局部内部类功能面试题&#xff1a;局部内部类访问局部变量的注意事项?A:局部内部类访问局部变量必须用final修饰B:为什么呢?局部变量…

1、匿名内部类(定义和使用方式)

/*匿名内部类就是内部类的简化写法。前提&#xff1a;存在一个类或者接口这里的类可以是具体类也可以是抽象类。格式&#xff1a;new 类名或者接口名(){重写方法;}本质是什么呢?是一个继承了该类或者实现了该接口的子类匿名对象。 */ interface Inter {public abstract void s…

2、匿名内部类在开发中的使用

/*匿名内部类在开发中的使用 */ interface Person {public abstract void study(); }class PersonDemo {//接口名作为形式参数//其实这里需要的不是接口&#xff0c;而是该接口的实现类的对象public void method(Person p) {p.study();} }//实现类 class Student implements Pe…