第2次作业+105032014045
1.测试帖链接:http://www.cnblogs.com/123zzj/p/6596839.html
2.测试人员提出的问题、发现的缺陷:
(1)输入三种物品数量时,可以分别输入,一次性输入情况太多需要考虑的太多;
(2)建议规定输入的格式;
(3)input = input.replaceAll("\\D", ",").replace("_+", ",");中的\\D已经把所有非数字部分全部转化为",",所以后面判断是否为负数的情况已经用不到
(4)考虑到可能会出现错误情况时,尽量使用try{}catch{} 语句。
3.修正后的代码清单:
public class CodeModification { private static Scanner scanner; /* * 耳机80元,手机壳10元,手机贴膜8元 */ public static float commission(int headphoneNum,int mpShellNum,int csProtectorNum){ int total = headphoneNum*80+mpShellNum*10+csProtectorNum*8; float commission = 0; if(total<1000){ commission = (float) (total*0.1); }else if(total>=1000 && total<=1800){ commission = (float) (1000*0.1+(total-1000)*0.15); }else if(total>1800){ commission = (float) (1000*0.1+800*0.15+(total-1800)*0.2); } return commission; } public static int inputHandle(Scanner sc, int index){ int data = 0; String[] prompt = {"请输入耳机销量:","请输入手机壳销量:","请输入手机贴膜销量:"}; while(true){ System.out.println(prompt[index]); String dataString = sc.nextLine(); try{ data = Integer.parseInt(dataString); if (data<0) { System.out.println("输入数量不满足要求"); continue; } return data; }catch(Exception e){ System.out.println("输入数量不满足要求"); } } } public static void main(String[] args) { while(true){ System.out.println("请分别输入三种手机配件的销售情况:"); scanner = new Scanner(System.in); int headphoneNum = inputHandle(scanner, 0); int mpShell = inputHandle(scanner, 1); int csProtectorNum = inputHandle(scanner, 2); float tax = commission(headphoneNum,mpShell,csProtectorNum); System.out.println("佣金额为:"+tax+"元"); } } }
4.修正后心得体会:
- 介绍自己代码做了怎样的变更
- 分析出现缺陷的原因
- 对这部分教材内容的学习心得
答:
变更:相对于之前的代码,此次的程序将三种配件数量的输入进行分开输入。并且将输入数据处理移出主函数,减轻主函数的代码臃肿程度。
原因:第一次的程序编写中,对于三种配件数量数据的输入是一次性全输入,使得需要对一次输入进行过多的处理来得到需要的正确数据。
心得:语句覆盖和判定覆盖能对于程序代码中的代码执行和条件判定进行执行能力和正确性测试,但却不能对程序中的逻辑进行判定。测试范围及深度有限。