算法 计算四则运算字符串结果
2020-12-13 06:07
标签:rgs 计算 link tle ringbuf array default message stat RingBuffer面试后面一场,输入一个字符串,计算结果 字符串内容限制为“ 0-9,+,-,*,/”这些符号 例如输入"1+2*3/4-5",返回-2.5。 开始到时候直接想到了可以用树来维护计算关系,后来被问可以用其他数据结构么,然后想到应该用栈来实现,写的时候用了一个,写到后面突然意识到应该用两个栈,一个存数据,一个存操作符。 在家里写了完成大概写了一个小时不到,当时是没写完,后来口述了一下逻辑。 重点在于: 1.第一个符号到判断,可能第一个字符是“+”或者“-”。 2.末尾非法符号判断。 3.中间连续连个操作符的判断。 具体是几行粗体代码 算法 计算四则运算字符串结果 标签:rgs 计算 link tle ringbuf array default message stat 原文地址:https://www.cnblogs.com/lvjianwei/p/11167382.htmlpackage com.ljw.javatest;
import java.util.LinkedList;
import java.util.Stack;
public class Calculate {
public static void print(Object value) {
System.out.println(value);
}
public static void main(String[] args) throws Exception {
String input = null;
input = "1+2*3/4-5";
print(calculate(input) == -2.5);
input = "-1+2*3/4-5";
print(calculate(input) == -4.5);
try {
input = "";
calculate(input);
} catch (Exception ex) {
print(ex.getMessage().equals(exMsg));
}
try {
input = null;
calculate(input);
} catch (Exception ex) {
print(ex.getMessage().equals(exMsg));
}
try {
input = "1+2*3/4-a5";
calculate(input);
} catch (Exception ex) {
print(ex.getMessage().equals(exMsg));
}
try {
input = "1+2*a3/4-5";
calculate(input);
} catch (Exception ex) {
print(ex.getMessage().equals(exMsg));
}
try {
input = "1+2**3/4-5";
calculate(input);
} catch (Exception ex) {
print(ex.getMessage().equals(exMsg));
}
try {
input = "1+2*3/4+-5";
calculate(input);
} catch (Exception ex) {
print(ex.getMessage().equals(exMsg));
}
try {
input = "1+-2*3/4-5";
calculate(input);
} catch (Exception ex) {
print(ex.getMessage().equals(exMsg));
}
try {
input = "1-2*3/4-5-";
calculate(input);
} catch (Exception ex) {
print(ex.getMessage().equals(exMsg));
}
}
static String exMsg = "invalid input";
public static double calculate(String input) throws Exception {
if (input == null || input.length() == 0) {
throw new Exception(exMsg);
}
char[] arr = input.toCharArray();
Stack