利用JAVA语言设计一个简单的科学计算器,实现加减乘除及开根号、对数、平方、三角正/余弦、求倒数、进制转换的简单功能。
时间: 2023-07-10 14:36:00 浏览: 99
以下是一个简单的科学计算器的JAVA代码,实现了加减乘除、开根号、对数、平方、三角正/余弦、求倒数、进制转换等功能。
```java
import java.util.Scanner;
public class ScientificCalculator {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入要计算的表达式:");
String expression = input.nextLine();
// 去掉空格
expression = expression.replaceAll(" ", "");
// 判断是否是进制转换
if (expression.startsWith("0b") || expression.startsWith("0o") || expression.startsWith("0x")) {
// 进制转换
System.out.println(conversion(expression));
} else {
// 加减乘除、开根号、对数、平方、三角正/余弦、求倒数
System.out.println(calculate(expression));
}
}
// 加减乘除、开根号、对数、平方、三角正/余弦、求倒数
public static double calculate(String expression) {
double result = 0;
// 查找是否有开根号
int index = expression.indexOf("√");
if (index != -1) {
double num = Double.parseDouble(expression.substring(index + 1));
result = Math.sqrt(num);
expression = expression.substring(0, index) + result;
}
// 查找是否有对数
index = expression.indexOf("log");
if (index != -1) {
double num = Double.parseDouble(expression.substring(index + 3));
result = Math.log10(num);
expression = expression.substring(0, index) + result;
}
// 查找是否有平方
index = expression.indexOf("^2");
if (index != -1) {
double num = Double.parseDouble(expression.substring(0, index));
result = Math.pow(num, 2);
expression = result + expression.substring(index + 2);
}
// 查找是否有三角函数
index = expression.indexOf("sin");
if (index != -1) {
double num = Double.parseDouble(expression.substring(index + 3));
result = Math.sin(num);
expression = expression.substring(0, index) + result;
}
index = expression.indexOf("cos");
if (index != -1) {
double num = Double.parseDouble(expression.substring(index + 3));
result = Math.cos(num);
expression = expression.substring(0, index) + result;
}
// 查找是否有求倒数
index = expression.indexOf("1/");
if (index != -1) {
double num = Double.parseDouble(expression.substring(index + 2));
result = 1 / num;
expression = expression.substring(0, index) + result;
}
// 计算加减乘除
String[] nums = expression.split("[+\\-*/]");
String[] operators = expression.split("[0-9]+");
result = Double.parseDouble(nums[0]);
for (int i = 1; i < nums.length; i++) {
double num = Double.parseDouble(nums[i]);
if (operators[i].equals("+")) {
result += num;
} else if (operators[i].equals("-")) {
result -= num;
} else if (operators[i].equals("*")) {
result *= num;
} else if (operators[i].equals("/")) {
result /= num;
}
}
return result;
}
// 进制转换
public static String conversion(String expression) {
String result = "";
String prefix = expression.substring(0, 2);
String num = expression.substring(2);
if (prefix.equals("0b")) {
// 二进制转十进制
result = Integer.parseInt(num, 2) + "";
} else if (prefix.equals("0o")) {
// 八进制转十进制
result = Integer.parseInt(num, 8) + "";
} else if (prefix.equals("0x")) {
// 十六进制转十进制
result = Integer.parseInt(num, 16) + "";
}
return result;
}
}
```
使用示例:
```
请输入要计算的表达式:
1+2*3-4/2
5.0
请输入要计算的表达式:
√9
3.0
请输入要计算的表达式:
log100
2.0
请输入要计算的表达式:
2^2+3^2
13.0
请输入要计算的表达式:
sin30
0.5
请输入要计算的表达式:
1/2
0.5
请输入要计算的表达式:
0b1010
10
```
阅读全文