第2次作业+105032014070

  • 测试帖链接

    http://www.cnblogs.com/lyz007/p/6605259.html

  • 测试人员提出的问题、发现的缺陷

    a.应该增加程序中的注释。

    b.并且减少无用的分支判断,提高代码的可复用性。例如下段程序

复制代码
int SameLengthNum(int a, int b, int c){
    int count = 0;
    if (a == b){
        count++;
    }
    if (a == c){
        count++;
    }
    if (b == c){
        count++;
    }
    return count;
}
复制代码

    c.可以考虑使用trycatch块减少异常发生的可能性

  • 修正后的代码清单  
import java.util.Scanner;


public class Distinguish {
    /**
     * 
     * @param a 三角形边的数值
     * @param b 三角形边的数值
     * @param c 三角形边的数值
     * @return 返回存在几对相等的边
     */
    private int SameLengthNum(int a,int b,int c){
        int count = 0;
        if(a==b){
            count++;//每存在一对相等的边计数加一
        }
        if(a==c){
            count++;
        }
        if(b==c){
            count++;
        }
        return count;
    }
    /**
     * 
     * @param a 三角形边的数值
     * @param b 三角形边的数值
     * @param c 三角形边的数值
     * @return 返回三角形的类型
     */
    private String Triangle(int a,int b,int c){
        String ch = null;
        if(!(1<=a&&a<=100) || !(1<=b&&b<=100) || !(1<=c&&c<=100)){
            return ch="边的值不在范围内";
        }
        if(!(a<(b+c)) || !(b<(a+c)) || !(c<(a+b))){
            return ch="不构成三角形";
        }
        switch(SameLengthNum( a, b, c)){//调用函数判断有几对边相等
            case 0:{
                if((a*a+b*b)==(c*c) || (a*a+c*c)==(b*b) || (c*c+b*b)==(a*a)){
                    ch="直角三角形";
                    break;
                }
                else{
                    ch="一般三角形";
                    break;
                }
            }//没有相等边
            case 1: ch="等腰三角形";break;//一对边相等
            case 3: ch="等边三角形";break;//三对边相等
        }
        return ch;
    }
    /**
     * 
     * @param in 输入流
     */
    private void Input(Scanner in){
        String input = null;
        System.out.println("请输入三角形的三条边(格式:a,b,c),当输入多余数据时只处理前三个:");
        input = in.nextLine();
        String[] value = input.split(",");//以“,”分割字符串
        if(!Validation(value)){//调用验证函数
            System.out.println("输入数据非法。");
        }
        else{
            int a = Integer.valueOf(value[0]).intValue();//已验证过不再进行异常处理
            int b = Integer.valueOf(value[1]).intValue();
            int c = Integer.valueOf(value[2]).intValue();
            String ch = Triangle(a,b,c);//调用判别函数
            System.out.println("测算结果:"+ch);
        }
    }
    /**
     * 
     * @param value String型三角形边长数据数组
     * @return    false:存在不是整数的值或获取的数据不足 true:验证通过
     */
    private boolean Validation(String[] value){
        if(value.length<3){//没有三个数据
            return false;
        }
        try {
            for(int i=0;i<3;i++){
                int b = Integer.valueOf(value[i]).intValue();
            }
        } catch (NumberFormatException e){//不能转换成整型
            return false;
        }
        return true;
    }
    /**
     * 入口
     */
    public void Menu(){
        boolean flag = true;
        while(flag){
            System.out.println("功能列表:\n\t1.测算三角形类型\n\t0.退出\n选择您所需要的功能:");
            String select = null;
            Scanner in = new Scanner(System.in);
            select = in.nextLine();
            if(!select.equals("1") && !select.equals("0")){
                System.out.println("请输入1或0选择您所需要的功能。");
            }
            else{
                switch(select){
                    case "0": {
                        flag = false;
                        System.out.println("感谢您的使用,再见!");
                        in.close();
                        break;
                    }
                    case "1": Input(in);break;
                }
            }
        }
    }
    public static void main(String[] args) {
        new Distinguish().Menu();
    }
}

 

  • 修正后心得体会:

    根据测试人员的建议添加了注释。

    我认为加写一个相等边对数判别有利于测试人员的测试,并不算无用分支。

    在C语言编程并不习惯使用try catch异常处理机制,此次在使用java语言编程便使用了异常处理机制,但并不多。

    通过测试人员的测试与提醒,能够更好的完善代码,以及改掉不良的编码习惯,软件测试的重要性不言而喻。

posted @ 2017-03-26 11:26  Nothing、  阅读(155)  评论(0编辑  收藏  举报