简单字符串进行四则运算
考察split() 用法(面试题常考)
并要使用BigDecimal来精确计算结果(finance常用)
本博客属个人学习记录用途 代码算法效率等问题肯定不完善
如果有建议 请尽管提出 欢迎讨论 感谢阅读
package calculate;
import java.math.BigDecimal;
import java.util.ArrayList;
public class calculator {
// static String s = "5.6 / 0.7 * 2 – 3.5";
static String s = "-1.3 + 5.1 / 3 – 0.8 – 0.4 – 3";
static String[] b = s.split(" ");
private static java.math.BigDecimal sum;
public static void main(String[] args) {
// TODO Auto-generated method stub
calculator c = new calculator();
// String[] b1 = chu(b);
// String[] b2 = cheng(b1);
// String[] b3 = remove(b2);- -
// double sum = addall(b3);
// System.out.println("n");
sum = c.calculate(b);
System.out.println("Result is :" + sum);
}
public BigDecimal calculate(String[] b) {
BigDecimal sum = null;
ArrayList e = new ArrayList();
for (int i = 0; i < b.length; i++) {
while (b[i].equals("/")) {
b = chu(b);
}
}
for (int i = 0; i < b.length; i++) {
while (b[i].equals("*")) {
b = cheng(b);
}
}
for (int i = 0; i < b.length; i++) {
while (b[i].equals("+")) {
b = removeplus(b);
}
}
for (int i = 0; i < b.length; i++) {
while (b[i].equals("–")) {
b = removeminus(b);
}
}
sum = addall(b);
return sum;
}
public String[] chu(String[] b) {
String[] r = new String[b.length - 2];
for (int i = 0; i < b.length; i++) {
if (b[i].equals("/")) {
for (int k = 0; k < i; k++) {
r[k] = b[k];
}
r[i - 1] = (new BigDecimal(b[i - 1]).divide(new BigDecimal(
b[i + 1]))).toString();
for (int j = i; j < b.length - 2; j++) {
r[j] = b[j + 2];
}
}
}
for (int i = 0; i < r.length; i++) {
System.out.println(r[i]);
}
return r;
}
private double BigDecimal(String string) {
// TODO Auto-generated method stub
return 0;
}
public String[] cheng(String[] b) {
String[] r = new String[b.length - 2];
for (int i = 0; i < b.length; i++) {
if (b[i].equals("*")) {
for (int k = 0; k < i; k++) {
r[k] = b[k];
}
r[i - 1] = (new BigDecimal(b[i - 1]).multiply(new BigDecimal(
b[i + 1]))).toString();
for (int j = i; j < b.length - 2; j++) {
r[j] = b[j + 2];
}
}
}
for (int i = 0; i < r.length; i++) {
System.out.println(r[i]);
}
return r;
}
public String[] removeminus(String[] b) {
String[] r = new String[b.length - 1];
for (int i = 0; i < b.length; i++) {
if (b[i].equals("–")) {
for (int k = 0; k < i; k++) {
r[k] = b[k];
}
r[i] = (new BigDecimal(0).subtract(new BigDecimal(b[i + 1])))
.toString();
for (int j = i; j < b.length - 2; j++) {
r[j + 1] = b[j + 2];
}
}
}
for (int i = 0; i < r.length; i++) {
System.out.println(r[i]);
}
return r;
}
public static String[] removeplus(String[] b) {
String[] r = new String[b.length - 1];
for (int i = 0; i < b.length; i++) {
if (b[i].equals("+")) {
for (int k = 0; k < i; k++) {
r[k] = b[k];
}
r[i] = (new BigDecimal(b[i + 1])).toString();
for (int j = i; j < b.length - 2; j++) {
r[j + 1] = b[j + 2];
}
}
}
for (int i = 0; i < r.length; i++) {
System.out.println(r[i]);
}
return r;
}
public BigDecimal addall(String[] b) {
BigDecimal sum = new BigDecimal(0);
for (int i = 0; i < b.length; i++) {
System.out.println(sum);
System.out.println(Double.parseDouble(b[i]));
sum = sum.add(new BigDecimal(b[i]));
}
System.out.println(sum);
return sum;
}
}