作业5.2


 

开发环境:Eclipse 

队员:吴舒婷 http://www.cnblogs.com/wst-2015/

第二阶段目标 - 通过测试程序和API 接口测试其简单的加减乘除功能。并能看到代码覆盖率。

  这个阶段在上次5.1的作业中已经有所体现了,

1、加减乘除的基本算法:

2、除法除数为0的处理:

测试:

作业5.2_第1张图片

 

作业5.1中实现

第三阶段目标 - 通过测试程序和API 接口测试对于各种参数的支持。并能看到代码覆盖率。

主要是对参数的支持:

1、对用户输入操作数个数的要求测试:只能输入2~5,输入其他都无效或者报错

System.out.println("选择多少个操作数:(2~5)");
        try
        {
            boolean value=false;
            while(value==false){
                num=in.nextInt();//操作数
                if(num<2||num>5)
                    System.out.println("\t超出范围!!请重新输入:");
                else value=true;
            }
        }    
        catch(Exception e){
            System.out.println("输入不合符合要求!!");
        }
        
检查操作数个数的输入

 

 作业5.2_第2张图片

2、对操作数的支持测试:检测用户输入的操作数是否符合要求(-100~100   其他字符无效,例如:g、t、%)

检查操作数
static float checknum(String astr1)//检查操作数
    {
         float a = 0;
        for(int i=0;i<num;i++)
        {
            boolean value=false;
            while (value==false){
            try {
                
             a=Float.parseFloat(astr1); //可以转换为整型;
             if(a>=-100&&a<=100) 
                  value=true;
             else{
                 System.out.println("操作符不在运算范围内!!重新输入");
                 astr1=in.next();
             }
            } catch (Exception g) {
               System.out.println("操作数错误,重新输入:");   
               astr1=in.next();
               
                 
             }
        }    
        }
        return a;
    }

 作业5.2_第3张图片

 

3、对运算符的支持测试:检测用户输入的操作数是否符合要求(只能输入:+  -  *  /    其他非法字符无效 )

static String checkoper(String a1,String oper1)//检查运算符
    {
        //检查运算符
        for(int i=0;i<num-1;i++)
        {
            boolean value=false;
            while(value==false){
                if( oper1.equals("+")|| oper1.equals("-")
                ||oper1.equals("*")||oper1.equals("/"))
                {
                    value=true;
                    
                }
                else
                
               {
                    System.out.println("输入的运算符不合法");
                    oper1=in.next();
                    
                    
               }
                
            }
        }
        return oper1;
    }
检查运算符

 作业5.2_第4张图片

4、对用户输入的答案进行处理测试:能输入数值,或者分数形式(例如:4、-1、(4/5))

static float solvesuerans(String userans)//处理用户输入的答案,return 用户输入的答案
    {
        float cs[]=new float[2];
        float user = 0;
         try {
             user=Float.parseFloat(userans);
           } 
          catch (Exception g) {
             
              String[] ss = new String[2];
                ss = userans.split("/");
                try{
                cs[0] = Float.valueOf(ss[0]);
                cs[1] = Float.valueOf(ss[1]);
                //System.out.println(cs[0]+"    "+cs[1]);
                user =  cs[0] / cs[1];
                //System.out.println(answer);
                String str=decimal.format(user);
                 user=Float.parseFloat(str);     
                }catch(Exception e)
                {
                    System.out.println("异常!!输入的答案无效!!");
                }
        }
        
        return user;
    }
用户输入处理

 作业5.2_第5张图片

用户可以输入有字符的式子

 作业5.2_第6张图片

源代码:

package 片段;

import java.text.DecimalFormat;
import java.util.Scanner;




public class Input {    
    static Scanner in=new Scanner(System.in);
    static DecimalFormat decimal = new DecimalFormat("#.##");
    static int num;
    
    static void input(String astr1[],String oper1[],float a[])//输入数据
    {
        System.out.println("选择多少个操作数:(2~5)");
        try
        {
            boolean value=false;
            while(value==false){
                num=in.nextInt();//操作数geshu
                if(num<2||num>5)
                    System.out.println("\t超出范围!!请重新输入:");
                else value=true;
            }
        }    
        catch(Exception e){
            System.out.println("输入不合符合要求!!");
        }
        
        //输入操作数
        for(int i=0;i<num;i++)
        {
            
            System.out.println("第"+(i+1)+"个操作数:");
            astr1[i]=in.next();
            a[i]=checknum(astr1[i]);    
        }
        
        //输入运算符
        for(int i=0;i<num-1;i++)
        {
            
            System.out.println("第"+(i+1)+"个运算符:");
            oper1[i]=in.next();
            oper1[i]=checkoper(astr1[i+1],oper1[i]);
        }
        formula(a,oper1);//显示出式子
    }
    
    static float checknum(String astr1)//检查操作数
    {
         float a = 0;
        for(int i=0;i<num;i++)
        {
            boolean value=false;
            while (value==false){
            try {
                
             a=Float.parseFloat(astr1); //可以转换为整型;
             if(a>=-100&&a<=100) 
                  value=true;
             else{
                 System.out.println("操作符不在运算范围内!!重新输入");
                 astr1=in.next();
             }
            } catch (Exception g) {
               System.out.println("操作数错误,重新输入:");   
               astr1=in.next();
               
                 
             }
        }    
        }
        return a;
    }
    static int CherkZero(String oper1[],String a1[])
    {
        for(int i=0;i<Input.num-1;i++){
            if(oper1[i].equals("/"))
            {
                float atest=Float.parseFloat(a1[i+1]);
                if(atest==0)
                {
        
                    System.out.println("\n除数不能为0,式子无效");
                    return 0;
                
                }
            }
        }
        return 1;
    }
    static String checkoper(String a1,String oper1)//检查运算符
    {
        //检查运算符
        for(int i=0;i<num-1;i++)
        {
            boolean value=false;
            while(value==false){
                if( oper1.equals("+")|| oper1.equals("-")
                ||oper1.equals("*")||oper1.equals("/"))
                {
                    value=true;
                    
                }
                else
                
               {
                    System.out.println("输入的运算符不合法");
                    oper1=in.next();
                    
                    
               }
                
            }
        }
        return oper1;
    }
    
    static void formula(float a1[],String oper1[])//显示出式子方程式
    {
        String s1=new String();
        
        String S=new String();
        System.out.print("输入的式子为:");
        for(int i=0;i<num;i++){
            if(i<(num-1))
            {
                if(a1[i]<0)
                    s1=String.valueOf("("+a1[i]+")");
                else
                    s1=String.valueOf(a1[i]);
                S=S+s1+oper1[i];
            }    
            else
            {
                if(a1[i]<0)
                    s1=String.valueOf("("+a1[i]+")");
                else
                    s1=String.valueOf(a1[i]);
                S=S+s1;
            }
        }
        System.out.print(S+"=");
    }
}
Input
package 片段;

import java.text.DecimalFormat;
import java.util.Scanner;

public class CalTest {
    static Scanner in=new Scanner(System.in);
    static DecimalFormat decimal = new DecimalFormat("#.##");
    static void judge(float a[],String oper[])//判断
    {
        System.out.println("\n请输入你的答案~~");
        String userans=in.next();
        float user=solvesuerans(userans);    
         
        
        float staticanswer=Cal(a,oper);
        
        if( user==staticanswer)
            System.out.println("回答正确!");
        else
            System.out.println("回答错误!答案为:"+staticanswer);
    }

    static float solvesuerans(String userans)//处理用户输入的答案,return 用户输入的答案
    {
        float cs[]=new float[2];
        float user = 0;
         try {
             user=Float.parseFloat(userans);
           } 
          catch (Exception g) {
             
              String[] ss = new String[2];
                ss = userans.split("/");
                try{
                cs[0] = Float.valueOf(ss[0]);
                cs[1] = Float.valueOf(ss[1]);
                //System.out.println(cs[0]+"    "+cs[1]);
                user =  cs[0] / cs[1];
                //System.out.println(answer);
                String str=decimal.format(user);
                 user=Float.parseFloat(str);     
                }catch(Exception e)
                {
                    System.out.println("异常!!输入的答案无效!!");
                }
        }
        
        return user;
    }

    static float Cal(float a[],String oper[]){  //计算出结果,return出一个正确答案
    int sign; // 累加运算时的符号
    float left, right;// 保存蹭结果
    float answer;
    // 计算标准答案
    left = 0;
    right =a[0];
    sign = 1;
    
    for (int g = 0; g <Input. num - 1; g++) {
        if(oper[g].equals("+")){
            left = left + sign * right;
            sign = 1;
            right = a[g + 1];
            
        }
        else if(oper[g].equals("-")){
            left = left + sign * right;
            sign = -1;
            right = a[g + 1];
        }
        else if(oper[g].equals("*")){
            right = right * a[g + 1];
        }
        else if(oper[g].equals("/")){
            right = right / a[g + 1];
        }
        
    }
    String staticanser = decimal.format(left + sign* right);
    
    answer=Float.parseFloat(staticanser); //可以转换为整型;
    
    return answer;
    }

}
CalTest
package 片段;

public class MainTest {
    static String[] astr=new String[10];
    static String[] oper=new String[5];
     static float[] a=new float[10];
    public static void main(String[] args) {
        Input.input(astr,oper,a);//操作数字符数组、运算符字符数组、操作数转float的数组
        int i=Input.CherkZero(oper, astr);
        if(i!=0)
            CalTest.judge(a,oper);//判断
    }
}
MainTest

 测试文件:

package 片段;

import org.junit.Test;

public class InputTest {

    @Test
    public void testInput() {    
        Input.input(MainTest.astr,MainTest.oper,MainTest.a);
        
        
    }
    
    
    @Test
    public void testCherkZero() {
        MainTest m1=new MainTest();
        Input.CherkZero(m1.oper, m1.astr);
    }
    

    
    @Test
    public void testjudge() {
        CalTest.judge(MainTest.a, MainTest.oper);
    }

    @Test
    public void testsolvesuerans() {
        CalTest.Cal(MainTest.a, MainTest.oper);
    }
}
Test

 

请继续收看更新

你可能感兴趣的:(作业)