当前位置: 代码迷 >> J2SE >> 关于if条件判断的一个新手有关问题
  详细解决方案

关于if条件判断的一个新手有关问题

热度:92   发布时间:2016-04-23 19:57:09.0
关于if条件判断的一个新手问题
本帖最后由 leet2 于 2015-03-18 00:19:12 编辑
//求1900年1月1日到2016年5月七日有多少天
public class days1 {
public static void main(String[] args){
int days=0;
for(int year=1900;year<=2015;year++){
if(year%4==0&&year%100!=0||year%400==0){
days+=366;
}else{
days+=365;
}
}//求出1900年1月1日到2015年12月31日的总天数
for(int month=1;month<=4;month++){ //判断月份 大月31天 二月判断29或者28天 小月30天
if(month%2==1||month==8){
days+=31;
}if(month==2){//这里我已经删掉了else提醒 多重if需要用else if
int years=2016;
if(years%4==0&&years%100!=0||years%400==0){
days+=29;
}else{
days+=28;
}
}else{
days+=30;
}
}//求出2016年1月到4月总天数
System.out.println("一共有"+(days+7)+"天");
}
}



各位老师大神好,我编写这段代码时 发现结果与预期不同 然后用debug发现在计算月份时,如1月份 if第一次判断加了31天
但是后来程序在else那里又加了个30天, 这里我就很迷惑了  我不是已经有一个条件判断,然后else不是应该属于我第一个
if判断条件以外的情况了吗 为什么还会自动加了30天???

我自己猜想判断我是少了else if  后面我加上结果运算正确, 但是不明白其中原理,所以贴出来让各位老师大神指教,谢谢!

顺便我想问问我这样判断月份是否正确合理? 谢谢
------解决思路----------------------
不加才怪,体会下以下区别

1、
过滤条件由小到大:
if (i>5) //i>5的被排除掉了 
else if(i>3)//看上面眼色行事,被挖掉一部分了,剩下的3-5区间段被排除了
  else  //剩下都该如此这般了...
筛选式的,满足条件的就在某一个主体里被虑掉了
这个是一个整体

2、
if...//好吧,我先执行这个

if...//else不在,上面那个执行与否关我鸟事
else if...//我得排除我上面那个人运行了的
这个可以看成2个独立的整体,相互没关联的

好吧,玩完游戏出来扯扯淡

程序再第二个if前加else就对了
还有month==8这个条件永远都不可能达到,你看你的循环条件







------解决思路----------------------
用毫秒值计算如何?

               Calendar c1900 = Calendar.getInstance();
c1900.set(1900, 0, 0);
Calendar c2016 = Calendar.getInstance();
c2016.set(2016, 4, 6);
long ms = c2016.getTimeInMillis() - c1900.getTimeInMillis();
long days = ms/1000/60/60/24;
System.out.println("days = "+days);//输出42495,对吗?

------解决思路----------------------
你的if判断哪里
if...if...else
else是跟着最近的一个if来判断的
分析一下你的代码:
当i=1也就是1月份的时候

if(month%2==1
------解决思路----------------------
month==8){  //我这里肯定执行,因为1%2==1所以day+=31;
    days+=31;
}
if(month==2)//因为这里没用else if,所以还得进行判断,month == 1不等于2,所以这里不执行
    int years=2016;
    if(years%4==0&&years%100!=0
------解决思路----------------------
years%400==0){
         days+=29;
     }else{
        days+=28;
    }
}else{//既然if不执行了,那么我else一定执行了,所以又+=30
    days+=30;
}
  相关解决方案