首页 > 代码库 > 第二次作业+105032014149

第二次作业+105032014149

测试帖链接:http://www.cnblogs.com/wangkunhuang/p/6591939.html

问题答复:

闰年2月28和平年2月27日的问题,当时只考虑了最后一天的情况,之前都是直接复制黏贴前一部分的代码,在修改时忘了记范围;

把isLeapYear单独分开是为了不让if语句变得太长。

修改后代码:

 1 package com.test;
 2 import java.util.Scanner;
 3 public class TestPractice {
 4     /*闰年判断
 5      * 返回值为true:该年为闰年
 6      * 返回值为false:该年为平年
 7     */
 8     public static boolean isLeapYear(int y)
 9     {
10         if((y % 4 == 0 && y % 100 != 0)||y % 400 == 0)
11             return true;
12         else
13             return false;
14     }
15     
16     //下一天判断,返回值为下一天的日期,格式是xxxx年x月x日
17     public static String NextDate(int y, int m, int d)
18     {
19         //判断年份是否超出范围
20         if(1912 <= y && y <= 2050)
21         {
22             //判断月份是否超出范围
23             if(1 <= m && m <= 12)
24             {            
25                 //大月判断,每个月只有31天
26                 if(m == 1||m == 3||m == 5||m == 7||m == 8||m ==10||m == 12)
27                 {
28                     if(1 <= d && d < 31)
29                         return y+"年"+m+"月"+(d+1)+"日";
30                     else if(d == 31)
31                     {    
32                         if(m == 12)
33                             return (y+1)+"年1月1日";
34                         else 
35                             return y+"年"+(m+1)+"月1日";
36                     }                    
37                     else 
38                         return "日期超出范围";
39                 }
40                 //小月判断,每个月只有30天
41                 else if(m == 4||m == 6||m == 9||m == 11)
42                 {
43                     if(1 <= d && d < 30)
44                         return y+"年"+m+"月"+(d+1)+"日";
45                     if(d == 30)    
46                         return y+"年"+(m+1)+"月1日";                    
47                     else
48                         return "日期超出范围";
49                 }
50                 /*二月份在平年和闰年天数不同
51                  * 所以需要分开统计
52                  * */
53                 else
54                 {
55                     if(isLeapYear(y))
56                     {
57                         if(1 <= d && d < 29)
58                             return y+"年"+m+"月"+(d+1)+"日";
59                         if(d == 29)    
60                             return y+"年"+(m+1)+"月1日";                    
61                         else
62                             return "日期超出范围";
63                     }
64                     else
65                     {
66                         if(1 <= d && d < 28)
67                             return y+"年"+m+"月"+(d+1)+"日";
68                         if(d == 28)    
69                             return y+"年"+(m+1)+"月1日";                    
70                         else
71                             return "日期超出范围";
72                     }
73                 }
74     
75             }
76             else
77                 return "月份超出范围";
78         }
79         else
80         {
81             return "年份超出范围";
82         }    
83             
84     }
85     
86     public static void main(String[] args) {
87         Scanner scan = new Scanner(System.in);
88         while(true)
89         {
90             System.out.print("请输入日期:");
91             int y = scan.nextInt();
92             if(y == -1) break;
93             int m = scan.nextInt();
94             int d = scan.nextInt();
95             System.out.println(NextDate(y,m,d));        
96         }
97     }
98 
99 }

修正体会:

修正后让自己明白了在写完代码后应该回头检查一遍,不能过于追求速度,得以及时把那些能直接发现的问题直接找出来,以便减少bug的存在。

代码修改部分  if(1 <= d && d < 29) 、 if(1 <= d && d < 28) 、 if(1 <= d && d < 31) 、  if(1 <= d && d < 30) ,原先没有吧每个月的倒数第二天包括在内,判定时直接使用了‘<‘号,本应该是使用‘<=‘或者把天数在扩大一天

 

心得体会:

通过对白盒测试部分的学习,明白了一些基本的覆盖方式,如语句覆盖、条件覆盖等,通过对这部分的学习能使得自己的代码变得更容易测试,更容易今早的发现一些基本的问题。

 

第二次作业+105032014149