设计一个能实现科学计算器功能的Java计算器,可以进行加、减、乘、除、取余、阶乘、正弦、余弦、正切、余切、指数、乘方、对数、倒数运算。还要能支持括号运算。
时间: 2023-09-17 14:06:30 浏览: 59
以下是一个基本的Java科学计算器实现,支持上述所有功能:
```java
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入表达式:");
String expression = scanner.nextLine();
double result = calculate(expression);
System.out.println("计算结果为:" + result);
}
// 计算表达式的值
public static double calculate(String expression) {
// 去除空格
expression = expression.replaceAll(" ", "");
// 处理括号
while (expression.contains("(")) {
int leftIndex = expression.lastIndexOf("(");
int rightIndex = expression.indexOf(")", leftIndex);
String subExpression = expression.substring(leftIndex + 1, rightIndex);
double subResult = calculate(subExpression);
expression = expression.substring(0, leftIndex) + subResult + expression.substring(rightIndex + 1);
}
// 处理乘方
while (expression.contains("^")) {
int index = expression.indexOf("^");
String leftStr = getLeftNum(expression, index);
String rightStr = getRightNum(expression, index);
double left = Double.parseDouble(leftStr);
double right = Double.parseDouble(rightStr);
double result = Math.pow(left, right);
expression = expression.substring(0, index - leftStr.length()) + result + expression.substring(index + rightStr.length() + 1);
}
// 处理乘除模
while (expression.contains("*") || expression.contains("/") || expression.contains("%")) {
int index = -1;
if (expression.contains("*")) {
index = expression.indexOf("*");
}
if (expression.contains("/") && (index == -1 || expression.indexOf("/") < index)) {
index = expression.indexOf("/");
}
if (expression.contains("%") && (index == -1 || expression.indexOf("%") < index)) {
index = expression.indexOf("%");
}
String leftStr = getLeftNum(expression, index);
String rightStr = getRightNum(expression, index);
double left = Double.parseDouble(leftStr);
double right = Double.parseDouble(rightStr);
double result = 0;
if (expression.charAt(index) == '*') {
result = left * right;
} else if (expression.charAt(index) == '/') {
result = left / right;
} else if (expression.charAt(index) == '%') {
result = left % right;
}
expression = expression.substring(0, index - leftStr.length()) + result + expression.substring(index + rightStr.length() + 1);
}
// 处理加减
double result = 0;
if (expression.contains("+")) {
int index = expression.indexOf("+");
String leftStr = getLeftNum(expression, index);
String rightStr = getRightNum(expression, index);
double left = Double.parseDouble(leftStr);
double right = Double.parseDouble(rightStr);
result = left + right;
} else if (expression.contains("-")) {
int index = expression.indexOf("-");
String leftStr = getLeftNum(expression, index);
String rightStr = getRightNum(expression, index);
double left = Double.parseDouble(leftStr);
double right = Double.parseDouble(rightStr);
result = left - right;
} else {
result = Double.parseDouble(expression);
}
return result;
}
// 获取运算符左边的数字
public static String getLeftNum(String expression, int index) {
String leftStr = "";
for (int i = index - 1; i >= 0; i--) {
char c = expression.charAt(i);
if (!Character.isDigit(c) && c != '.') {
break;
}
leftStr = c + leftStr;
}
return leftStr;
}
// 获取运算符右边的数字
public static String getRightNum(String expression, int index) {
String rightStr = "";
for (int i = index + 1; i < expression.length(); i++) {
char c = expression.charAt(i);
if (!Character.isDigit(c) && c != '.') {
break;
}
rightStr += c;
}
return rightStr;
}
}
```
这个计算器可以处理括号、乘方、乘除模、加减、以及数字和小数点的输入。你可以在main方法中输入表达式进行计算,例如:
```
请输入表达式:
(2+3)*4^2-10%3
计算结果为:74.0
```