热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

四则运算5.2-5.3

开发环境:eclipse结对同伴:32马志磊同伴博客:http:www.cnblogs.commac54321程序介绍:第二阶段目标-通过测试程序和API接口测

开发环境:eclipse

结对同伴 :32 马志磊

同伴博客:http://www.cnblogs.com/mac54321/

 

程序介绍:

第二阶段目标 - 通过测试程序和API 接口测试其简单的加减乘除功能。

比如:

  • 最多4 个运算符

  • 数值范围是 -1000 到 1000

  • 精度是小数点后两位

 

第三阶段目标 - 通过测试程序和API 接口测试对于各种参数的支持。

  • 定义要增加什么功能 - 例如:支持 “运算式子格式错误” 异常

  • 写好测试用例,传进去一个错误的式子,期望能捕获这个 异常。 如果没有,那测试就报错。

  • 在 Core 模块中实现这个功能

源代码:

Core.java

import java.text.DecimalFormat;
import java.math.RoundingMode;
public class Core {
	private int MAXNUM=10;//操作数
	private int OP=10;	//运算符
	private int MAXrange=1000;//数值范围 
	private int MINrange=-1000;//数值范围 
	private int JD=2;//计算精度
	public Core(int MAXNUM,int OP,int MAXrange,int MINrange,int JD){
		this.MAXNUM=MAXNUM;
		this.OP=OP;
		this.MAXrange=MAXrange;
		this.MINrange=MINrange;
		this.JD=JD;
	}
	public Core(){
		this.MAXNUM=10;
		this.OP=10;	
		this.MAXrange=1000;
		this.MINrange=-1000;
		this.JD=2;
	}
	public void setMAXNUM(int MAXNUM){
		this.MAXNUM=MAXNUM;
	}
	public void setOP(int OP){
		this.OP=OP;
	}
	public void setMAXrange(int MAXrange){
		this.MAXrange=MAXrange;
	}
	public void setMINrange(int MINrange){
		this.MINrange=MINrange;
	}
	public void setJD(int JD){
		this.JD=JD;
	}
	
	public String jisuan(String str) throws cuowu  {
		String num[] =new String[MAXNUM];
		int number[] =new int[MAXNUM];
		char operator[]=new char [OP];
		int brackets=0,endbrackets=0;
		int posbra=0,endposbra=0;
		int j;int k;
		double result=0;
		boolean flag;
		for(int i=0;i='0' && str.charAt(i)<='9' ||  str.charAt(i)=='.')
			{
				flag=false;
				num[j]=num[j]+ str.charAt(i);
			}
			else if(str.charAt(i)=='+' || str.charAt(i)=='-' || str.charAt(i)=='*' || str.charAt(i)=='/')
			{
				if(flag==true) throw new cuowu("公式错误!不能连续输入运算符");
				flag=true;
				j++;
				if(j>MAXNUM-1)
					throw new cuowu("操作数不能超过"+MAXNUM+"个!");
				if(k>OP-1)
					throw new cuowu("运算符不能超过"+OP+"个!");
				operator[k]=str.charAt(i);
				k++;
			}
			else if(str.charAt(i)=='(')
			{
				brackets++;
				posbra=i;
			}else if(str.charAt(i)==')'){
				endbrackets++;
			}
		}	
		if(brackets!=endbrackets)
			throw new cuowu("括号不对称!");

		for(int i=0;i<=j;i++)
			if(Double.parseDouble(num[i])>MAXrange || Double.parseDouble(num[i]) 
 
public class Calculator {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String exp=new String("10.5222+10.222=");
		Core c=new Core(10,10,500,-500,4);
		try{
			String result=c.jisuan(exp);
			System.out.print(result);
		}
		catch(cuowu e){
			e.printStackTrace();
		}
	}
}

  我们在原来5.1的基础上增加了自定义异常 和各种参数设置。例如,最多几个运算符,数据范围是多少,还要设置计算的精度(保留几位小数)

测试结果

(1)计算的精度(保留几位小数)

(2)测试数值范围 超过500 就会出错 抛出异常

 (3)测试运算符 超过4个就会出错 抛出异常

(4)测试操作数 超过5个就会出错 抛出异常

出现的问题及解决方法:

  我们在小数点精度不知道如何进行做,然后我们通过网上学习,发现了DecimalFormat()类可以实现这个问题,我们通过学习与消化,把小数精度问题顺利解决了!


推荐阅读
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
author-avatar
霍任芳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有