标签:java imp ret 检查 范围 复制 tin pack else
测试帖链接: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) ,原先没有吧每个月的倒数第二天包括在内,判定时直接使用了‘<‘号,本应该是使用‘<=‘或者把天数在扩大一天
心得体会:
通过对白盒测试部分的学习,明白了一些基本的覆盖方式,如语句覆盖、条件覆盖等,通过对这部分的学习能使得自己的代码变得更容易测试,更容易今早的发现一些基本的问题。
标签:java imp ret 检查 范围 复制 tin pack else
原文地址:http://www.cnblogs.com/ElliotBaird/p/6613215.html