作业5.2
开发环境:Eclipse
队员:吴舒婷 http://www.cnblogs.com/wst-2015/
第二阶段目标 - 通过测试程序和API 接口测试其简单的加减乘除功能。并能看到代码覆盖率。
这个阶段在上次5.1的作业中已经有所体现了,
1、加减乘除的基本算法:
2、除法除数为0的处理:
测试:
作业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("输入不合符合要求!!"); }
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; }
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; }
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; }
用户可以输入有字符的式子
源代码:
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+"="); } }
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; } }
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);//判断 } }
测试文件:
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); } }
请继续收看更新