有时候设计到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实现计算器加减乘除功能"旨在帮助开发者巩固面向对象编程、控制结构、运算符以及异常处理等基本技能。下面将详细介绍这个项目可能涉及的知识点。 1. **面向对象编程**:Java是一种面向对象的语言,...
- **混合运算**:当没有括号时,执行混合运算(先乘除后加减)。 - **混合运算方法**:`private static String interceptOperation(String operationNumber, char a, char b) {...}` - **符号识别**:该方法遍历...
在Java编程中,处理大数(大数据)的加减乘除运算是一项常见的需求,尤其是在金融、科学计算等领域。数组作为一种基础数据结构,可以用来存储这些大数,通过自定义算法来实现四则运算。以下是对标题和描述中涉及的...
例如,`(45+76)*65+(3-6+(4*7))` 就是一个包含加法、减法、乘法和括号的JAVA表达式。计算这样一个表达式需要遵循运算符的优先级规则,通常遵循“先乘除后加减”的原则,且同级运算符按照从左到右的顺序计算。 接着...
例如,对于每一个数,我们都尝试与其余的数进行加、减、乘、除运算,并递归调用`calculate`方法处理剩下的3个数。 为了处理除法,我们需要额外注意,避免除以零的情况。同时,为了防止无限递归,我们还需要确保在...
【标题】"java_calculator2.rar_java 计算器_java 计算器"指的是一个基于Java编程语言实现的计算器程序。这个程序可能是作者独立开发的,且在互联网上较为独特,难以找到完全相同的设计。 【描述】"自编java计算器...
1. 变量交换:在Java中,给定a=10和b=15,不使用第三方变量进行a、b值的互换可以通过加减法实现。如`a=a+b; b=a-b; a=a-b;`这种方法被称为XOR交换,它利用异或操作符实现无额外变量的交换,但这里使用的是加减法。...
在Java中,可以使用正则表达式进行词法分析,然后通过递归下降解析或其他解析技术进行语法分析。 在构建抽象语法树后,我们可以使用递归遍历或者迭代遍历的方法来计算表达式的值。对于包含括号的表达式,我们需要先...
- **运算符优先级**:学习如何处理不同运算符的优先级,例如,先乘除后加减。 - **异常处理**:了解Java中的try-catch块,用于捕获和处理可能出现的错误,比如除数为零的情况。 - **数据类型和转换**:理解Java中的...
Java中可以通过递归或者循环结构实现这些算法。 5. **微积分**:包括求导和求极值等,这在优化问题和模拟计算中常见。虽然Java标准库没有提供直接支持,但可以通过自定义函数和迭代算法来实现。 6. **统计与概率**...
1. **费波那契数列**(Fibonacci Sequence):这是一种基于递归定义的数学序列,其中每个数字是前两个数字的和。第一项和第二项分别为0和1,后续项由这两个数相加得到。例如:0, 1, 1, 2, 3, 5, 8, 13...。实验要求...
Java的大数类`java.math.BigInteger`和`java.math.BigDecimal`提供了对任意大小整数和浮点数的操作,如加、减、乘、除、比较等,以及模运算、幂运算等功能。这对于金融计算、密码学、精确计算等场景非常有用。 接...
在Java编程中,堆栈是一种基于“后进先出”(LIFO)原则的数据结构,常用于实现递归、表达式求值等场景。本文将详细介绍如何利用Java的堆栈数据结构来实现简单的四则运算。 四则运算,即加法(+)、减法(-)、乘法...
- **优先级运算**:运算符有不同的优先级,例如乘法和除法的优先级高于加法和减法,而括号内的运算优先级最高。 - **括号**:在数学表达式中,括号用于改变运算的顺序,使得括号内的运算先于外部的运算执行。 2. ...
在Java中,这可能需要递归或者迭代的解决方案,处理余数直到余多项式小于除数。 6. **输入/输出**: - 程序可能包含了读取和写入多项式的方法,这可能涉及到解析和生成字符串表示,例如`"2x^3 + 3x^2 - 4"`。 7. ...
在本项目中,我们关注的是一个基于Java编写的简单计算器,它能够执行基本的数学运算,如加、减、乘、除,这对于初学者来说是一个很好的实践项目。 1. **基础结构** Java程序通常由一个或多个类组成,每个类包含...
此外,还需考虑如何表示运算符,例如加法、减法、乘法和除法。 2. **算法实现**:游戏的核心算法是遍历所有可能的运算组合。我们可以采用回溯法,从四张牌的所有可能的运算开始,逐步尝试各种组合,如果得到的结果...
这个过程可以通过递归实现,每次将问题规模减半,直到每个子问题只涉及单个项。利用单位根的性质,可以减少计算量。 ### FFT的迭代实现 通过迭代的方式,FFT可以进一步优化。在迭代过程中,执行所谓的“蝴蝶操作”...
实例18 Java中的递归 31 实例19 男生女生各多少人 32 实例20 求水仙花数 34 实例21 求任意一个正数的阶乘 35 实例22 求n的n次方 35 实例23 利用for循环输出几何图形 36 实例24 杨辉三角 ...