`
xiaofengtoo
  • 浏览: 492742 次
  • 性别: Icon_minigender_1
  • 来自: xiamen
社区版块
存档分类
最新评论

java 递归加减法

    博客分类:
  • java
 
阅读更多

有时候设计到list map 做交集,并集等操作。

可以参考加减法的实现

 

public class Test {

	/**
	 * @param args
	 */
	
	public static final char y_all='+';
	public static final char y_diff='-';
	public static final char y_and='&';		// 不使用
	
	// 思路是 通过运算符 拆分左右二边,然后左右2变进行运算  递归操作
	public static void main(String[] args) {
		String s = "((1+2)-(3-4))+((0+1)-(2-1))";
		String s1 ="((10+2)-3)+(5-2)";
		
		System.out.println(getall(s1));
	}

	public static int getall(String rel){
		
		// 判断最小单位
		if(rel.indexOf("(")==-1 && rel.indexOf(")")==-1 && rel.indexOf(y_all)==-1 && rel.indexOf(y_diff)==-1){
			return getUser(rel);
		}else{
			String left = getLeft(rel);
			System.out.println("left: "+left);
			String right = getRight(rel);
			System.out.println("right: "+right);
			
			String op = getOP(rel);
			System.out.println("op: "+op);
			
			return Oper(getall(left), getall(right), op);
		
		}
	}
	
	public static String getLeft(String rel){
		int index=0;
		int sub = getSub(rel, index);
		String str = rel.substring(0,sub);
		return clearK(str);
	}
	
	
	public static String getRight(String rel){
		int index=0;
		int sub = getSub(rel, index);
		String str = rel.substring(sub+1);
		return clearK(str);
	}
	
	public static String getOP(String rel){
		int index=0;
		int sub = getSub(rel, index);
		String str = rel.substring(sub,sub+1);
		return str;
	}
	
	public static int Oper(int left,int right,String op){
		int tmp=0 ;
		if(op.equals("+")){
			tmp = left+right;
		}else if(op.equals("-")){
			tmp = left-right;
		}else if(op.equals("&")){
			//TODO:
		}
		return tmp;
	}
	
	public static int getUser(String rel){
		int t =0;
		if(null!=rel && !rel.isEmpty()){
			t = Integer.parseInt(rel);
		}
		return t;
	}
	
	public static String clearK( String rel ) {
		
		if(rel.startsWith("(") && rel.endsWith(")")){
			rel = rel.substring(1,rel.length()-1);
		}
		return rel;
		
	}
	
	
	private static int getSub(String rel, int index) {
		int sub =0;
		char[] clt = rel.toCharArray();
		for(int i=0;i<clt.length;i++){
			char c = clt[i];
			if(c=='('){
				index++;
			}
			if(c==')'){
				index--;
			}
			if(c==y_all){
				if(index==0){
					sub = i ;
					break;
				}
			}
			if(c==y_diff){
				if(index==0){
					sub = i ;
					break;
				}
			}
			if(c==y_and){
				if(index==0){
					sub = i ;
					break;
				}
			}
		}
		return sub;
	}
}
 
分享到:
评论

相关推荐

    Java实现计算器加减乘除功能.zip

    这个项目"Java实现计算器加减乘除功能"旨在帮助开发者巩固面向对象编程、控制结构、运算符以及异常处理等基本技能。下面将详细介绍这个项目可能涉及的知识点。 1. **面向对象编程**:Java是一种面向对象的语言,...

    简单的JAVA四则运算

    - **混合运算**:当没有括号时,执行混合运算(先乘除后加减)。 - **混合运算方法**:`private static String interceptOperation(String operationNumber, char a, char b) {...}` - **符号识别**:该方法遍历...

    java 数组实现大数加减乘除运算

    在Java编程中,处理大数(大数据)的加减乘除运算是一项常见的需求,尤其是在金融、科学计算等领域。数组作为一种基础数据结构,可以用来存储这些大数,通过自定义算法来实现四则运算。以下是对标题和描述中涉及的...

    JAVA表达式计算器代码

    例如,`(45+76)*65+(3-6+(4*7))` 就是一个包含加法、减法、乘法和括号的JAVA表达式。计算这样一个表达式需要遵循运算符的优先级规则,通常遵循“先乘除后加减”的原则,且同级运算符按照从左到右的顺序计算。 接着...

    24点计算java实现

    例如,对于每一个数,我们都尝试与其余的数进行加、减、乘、除运算,并递归调用`calculate`方法处理剩下的3个数。 为了处理除法,我们需要额外注意,避免除以零的情况。同时,为了防止无限递归,我们还需要确保在...

    java_calculator2.rar_java 计算器_java 计算器

    【标题】"java_calculator2.rar_java 计算器_java 计算器"指的是一个基于Java编程语言实现的计算器程序。这个程序可能是作者独立开发的,且在互联网上较为独特,难以找到完全相同的设计。 【描述】"自编java计算器...

    java面试题整理答案2012

    1. 变量交换:在Java中,给定a=10和b=15,不使用第三方变量进行a、b值的互换可以通过加减法实现。如`a=a+b; b=a-b; a=a-b;`这种方法被称为XOR交换,它利用异或操作符实现无额外变量的交换,但这里使用的是加减法。...

    java GUI计算器

    在Java中,可以使用正则表达式进行词法分析,然后通过递归下降解析或其他解析技术进行语法分析。 在构建抽象语法树后,我们可以使用递归遍历或者迭代遍历的方法来计算表达式的值。对于包含括号的表达式,我们需要先...

    java做的小小计算器

    - **运算符优先级**:学习如何处理不同运算符的优先级,例如,先乘除后加减。 - **异常处理**:了解Java中的try-catch块,用于捕获和处理可能出现的错误,比如除数为零的情况。 - **数据类型和转换**:理解Java中的...

    Java 常用数值算法集

    Java中可以通过递归或者循环结构实现这些算法。 5. **微积分**:包括求导和求极值等,这在优化问题和模拟计算中常见。虽然Java标准库没有提供直接支持,但可以通过自定义函数和迭代算法来实现。 6. **统计与概率**...

    电子科大java实验

    1. **费波那契数列**(Fibonacci Sequence):这是一种基于递归定义的数学序列,其中每个数字是前两个数字的和。第一项和第二项分别为0和1,后续项由这两个数相加得到。例如:0, 1, 1, 2, 3, 5, 8, 13...。实验要求...

    nc.jar.zip_java 矩阵_java 计算_大数_大数计算 java_矩阵

    Java的大数类`java.math.BigInteger`和`java.math.BigDecimal`提供了对任意大小整数和浮点数的操作,如加、减、乘、除、比较等,以及模运算、幂运算等功能。这对于金融计算、密码学、精确计算等场景非常有用。 接...

    Java利用堆栈实现简单四则运算

    在Java编程中,堆栈是一种基于“后进先出”(LIFO)原则的数据结构,常用于实现递归、表达式求值等场景。本文将详细介绍如何利用Java的堆栈数据结构来实现简单的四则运算。 四则运算,即加法(+)、减法(-)、乘法...

    java计算器含括号可进行优先级运算

    - **优先级运算**:运算符有不同的优先级,例如乘法和除法的优先级高于加法和减法,而括号内的运算优先级最高。 - **括号**:在数学表达式中,括号用于改变运算的顺序,使得括号内的运算先于外部的运算执行。 2. ...

    Poly.zip_java Poly_poly_poly java_polynomial_多项式 java

    在Java中,这可能需要递归或者迭代的解决方案,处理余数直到余多项式小于除数。 6. **输入/输出**: - 程序可能包含了读取和写入多项式的方法,这可能涉及到解析和生成字符串表示,例如`"2x^3 + 3x^2 - 4"`。 7. ...

    简单计算器Java编的

    在本项目中,我们关注的是一个基于Java编写的简单计算器,它能够执行基本的数学运算,如加、减、乘、除,这对于初学者来说是一个很好的实践项目。 1. **基础结构** Java程序通常由一个或多个类组成,每个类包含...

    用java编24点游戏(附源码)

    此外,还需考虑如何表示运算符,例如加法、减法、乘法和除法。 2. **算法实现**:游戏的核心算法是遍历所有可能的运算组合。我们可以采用回溯法,从四张牌的所有可能的运算开始,逐步尝试各种组合,如果得到的结果...

    快速傅里叶变换 FFT (Fast Fourier Transformation)介绍,包含java和C++实现

    这个过程可以通过递归实现,每次将问题规模减半,直到每个子问题只涉及单个项。利用单位根的性质,可以减少计算量。 ### FFT的迭代实现 通过迭代的方式,FFT可以进一步优化。在迭代过程中,执行所谓的“蝴蝶操作”...

    java范例开发大全源代码

     实例18 Java中的递归 31  实例19 男生女生各多少人 32  实例20 求水仙花数 34  实例21 求任意一个正数的阶乘 35  实例22 求n的n次方 35  实例23 利用for循环输出几何图形 36  实例24 杨辉三角 ...

Global site tag (gtag.js) - Google Analytics