zoukankan      html  css  js  c++  java
  • 再试条件结构

    通过上次的练习,我已对单一的条件结构已经掌握纯熟,恰逢老师布置的周末作业中,有一道思考题,对条件结构知识点考究比较多,我忍不住有拿出来看看。

    题目是:任意输入一个年 月 日 的日期,输出这是这一年的第几天。例如:1月1日 是这年的第1天,12月31日,是这年的365天或则是366天(因为有闰年会多一天)

    public class L4月27日思考题{
     public static void main(String[]agrs){
      int a=Integer.parseInt(agrs[0]) ;
      int b=Integer.parseInt(agrs[1]) ;
      int c=Integer.parseInt(agrs[2]) ;
      int d=0;
      if(c<=31){
      if(a%100==0){
       if(a%400==0){  //这是闰年
       //d=闰年的方法;
        switch(b){
         case 1:
     d=c;
         break;
         case 2:
     d=c+31;
         break;
         case 3:
     d=c+31+29;
         break; 
         case 4:
     d=c+31+29+31;
         break; 
         case 5:
    d=c+31+29+31+30;
         break; 
         case 6:
     d=c+31+29+31+30+31;
         break; 
         case 7:
    d=c+31+29+31+30+31+30;
         break;  
         case 8:
    d=c+31+29+31+30+31+30+31;
         break; 
         case 9:
    d=c+31+29+31+30+31+30+31+31;
         break; 
         case 10:
     d=c+31+29+31+30+31+30+31+31+30;
         break; 
         case 11:
    d=c+31+29+31+30+31+30+31+31+30+31;
         break; 
         case 12:
    d=c+31+29+31+30+31+30+31+31+30+31+30;
         break;
         default:
         System.out.println("无效的日期"); 
          }    
       }else{   //这是整百的平年
       //d=平年的方法;
         switch(b){
         case 1:
    d=c;
         break;
         case 2:
    d=c+31;
         break;
         case 3:
    d=c+31+28;
         break; 
         case 4:
    d=c+31+28+31;
         break; 
         case 5:
    d=c+31+28+31+30;
         break; 
         case 6:
    d=c+31+28+31+30+31;
         break; 
         case 7:
     d=c+31+28+31+30+31+30;
         break;  
         case 8:
    d=c+31+28+31+30+31+30+31;
         break; 
         case 9:
    d=c+31+28+31+30+31+30+31+31;
         break; 
         case 10:
    d=c+31+28+31+30+31+30+31+31+30;
         break; 
         case 11:
    d=c+31+28+31+30+31+30+31+31+30+31;
         break; 
         case 12:
    d=c+31+28+31+30+31+30+31+31+30+31+30;
         break;
         default:
         System.out.println("无效的日期"); }
      }
      }else{if(a%4==0){    //这是闰年"
          //d=闰年的方法;
         switch(b){
         case 1:
    d=c;
         break;
         case 2:
    d=c+31;
         break;
         case 3:
    d=c+31+29;
         break; 
         case 4:
    d=c+31+29+31;
         break; 
         case 5:
    d=c+31+29+31+30;
         break; 
         case 6:
    d=c+31+29+31+30+31;
         break; 
         case 7:
    d=c+31+29+31+30+31+30;
         break;  
         case 8:
    d=c+31+29+31+30+31+30+31;
         break; 
         case 9:
    d=c+31+29+31+30+31+30+31+31;
         break; 
         case 10:
    d=c+31+29+31+30+31+30+31+31+30;
         break; 
         case 11:
    d=c+31+29+31+30+31+30+31+31+30+31;
         break; 
         case 12:
    d=c+31+29+31+30+31+30+31+31+30+31+30;
         break; 
         default:
         System.out.println("无效的日期");  }
       }else{   //这是不整百的平年
           //d=平年的方法;
         switch(b){
         case 1:
    d=c;
         break;
         case 2:
    d=c+31;
         break;
         case 3:
    d=c+31+28;
         break;
         case 4:
    d=c+31+28+31;
         break; 
         case 5:
    d=c+31+28+31+30;
         break; 
         case 6:
    d=c+31+28+31+30+31;
         break; 
         case 7:
    d=c+31+28+31+30+31+30;
         break;  
         case 8:
    d=c+31+28+31+30+31+30+31;
         break; 
         case 9:
    d=c+31+28+31+30+31+30+31+31;
         break; 
         case 10:
    d=c+31+28+31+30+31+30+31+31+30;
         break; 
         case 11:
    d=c+31+28+31+30+31+30+31+31+30+31;
         break; 
         case 12:
    d=c+31+28+31+30+31+30+31+31+30+31+30;
         break;
         default:
         System.out.println("无效的日期");}

    }

      

    } }else{
     System.out.println("无效的日期");}

      System.out.println("这是这一年的第"+d+"天");

     
     }
    }

        其实看到这道题,思路是很清晰的,判定闰年还是非闰年,闰年一种方法,非闰年一种方法,用IF分开else分开,审题不到3分钟我就开始写题。

        直到写到中间我才发现,我审题的时间确实太短了,因为这道题按照我想的来看确实很复杂,因为判别闰年是有2种不同的方法的,加上闰年和平年的不同算法,就会出现2*2次运算,这大大加长了代码的长短,越长的代码越容易错。其实如果仔细审题还是可以发现的,其实闰年的2月到12月就比平年多1天,2月拿出来单独处理,剩下的就只判断是闰年就+1天,是平年就少1天。

        而且直到现在我才发现自己又多了1个错误,2月是个特殊的月份,他的日子不能超过29日,我却忘记特殊限制了,看来这道题确实不如我想的简单啊,怕是有要改动了。

        现讨论下我已有的,还有瑕疵的代码,

        这道题,从开始就就明确了,需要输入,年月日,所以很自然的会想到键入3个整数型的数,年份是没有限制的,月份有限制,日期有限制,所以,键入  int a=Integer.parseInt(agrs[0]) ;  int b=Integer.parseInt(agrs[1]) ;  int c=Integer.parseInt(agrs[2]) ;  这里要强调,英文的准确性,我因为单词大错,大小写问题,出了几百个错误,检查了10多20分钟才检查出来,这应该多小心,多仔细,一句话,多打几次,打熟悉了看熟悉了就不会错了。继续,把天数d拿出来,然后开始写运算关系,这里又要强调,这次我写代码发现,如果仅仅写int d,不赋值,靠if,switch里面的表达式赋值,会报错,变量d,没有初始化,所以以后如非赋值会导致结果错乱,否则还是先赋值,特别是遇到条件,如果不满足的话,直接拉下来,没赋值肯定会报错。

        搭建大纲,逻辑关系,1,按照我的思路,首先判别a,闰年与否,所以直接带入if,else, 因为2种判别方法,所以就用if,写一种,else写一种,逻辑上就是,(if)如果这个年份能被100整除,能被400整除,(else)如果不能100整除 能被4整除, 这就是我的思路,于是就有了 if  里面添1个 if else,else里面添加1个if,else,代码上完全没有问题,

            在关键位置上标明 //该年是闰年,//该年是平年,先把大纲描绘出来。花括号打好,免得后面代码多了,难看。

      然后大纲搭建好了以后,现在是开始认真的运算,标注了4处,平年的算法和闰年的算法,其实平年的算法和闰年算法真的大同小异,基本上一样,都是前面的日子加起来,关键是,其中有1个日子是可变的,所以,为了这个可变的情况,把所有的月份全部摊开,使用switch的语句,采用12个方案,1月-12月的方法 全部写出来,套用方案,自然就能回避2月可变的情况。

      总结出错的地方,switch,在现阶段我还是第一次用,出错概率真心有点大,case后必须空格接Int的数字,此错误检查时间10分钟,case后数字,可以是int,可以是char,char加"",但是int可以不用加,我不小心加了,一直报错未检查出来,此问题检查了10分钟。case后,必须接default,否则出错,此问题2分钟。花括号,此问题让我检查了20多分钟,才确定好了所有的花括号,养好打花括号的好习惯,能节约好多写代码的时间。

      总结java命令,常出现的错误提示,“进行语法解释时,已到达文件结尾”,这是缺少花括号}

                                           “java不兼容的类型”,switch语句中表达式的类型必须是兼容的基本类型,打了引号以后 就被识别为chai。

                      “java需要为case、default”,switch语句中,必须case后加default。

                      “java 需要class,interface或enum” 花括号,没有打。

  • 相关阅读:
    STM32F030 启用内部晶振并配置系统时钟为48M
    CSS 动画过程及间接实现样式延时
    Post请求的两种编码格式:application/x-www-form-urlencoded和multipart/form-data
    21 GetHashCode Equels ReferenceEquals的比较
    3 Base64编码主要应用在那些场合?
    2 什么是编码?什么是Unicode?
    2 名企面试_02
    ListView
    Image
    Container
  • 原文地址:https://www.cnblogs.com/gongshengquan/p/3695274.html
Copyright © 2011-2022 走看看