要实现一个简单的Java计算器,可以按照如下步骤进行。
第一步:设计程序结构和功能
程序结构上可以分为两个模块:输入计算表达式和计算表达式结果。每个模块具体的功能可以分为:
-
输入表达式:从命令行输入表达式。
-
计算表达式:解析表达式计算结果。
第二步:代码实现
输入表达式模块
在Java中,可以通过标准库的Scanner
类来实现从命令行中读取输入的表达式。具体代码如下:
Scanner scanner = new Scanner(System.in);
System.out.println("请输入计算表达式:");
String input = scanner.nextLine();
计算表达式模块
在Java中,可以使用栈来实现计算表达式的求值,具体步骤如下:
-
定义两个栈,一个存储数字,一个存储运算符。
-
遍历表达式字符串,根据情况将数字入栈,或者将运算符入栈或者计算栈顶的两个数字。
-
最后将数字栈中的栈顶元素作为结果输出。
具体代码如下:
Stack<Integer> numStack = new Stack<>();
Stack<Character> opStack = new Stack<>();
String regex = "(\\d+)|([\\+\\-\\*/()])";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String str = matcher.group();
if (str.matches("\\d+")) {
numStack.push(Integer.parseInt(str));
} else {
char ch = str.charAt(0);
if (opStack.empty() || ch == '(' || compare(ch,opStack.peek()) > 0) {
opStack.push(ch);
} else {
while (!opStack.empty() && compare(ch,opStack.peek()) <= 0) {
int b = numStack.pop();
int a = numStack.pop();
char op = opStack.pop();
numStack.push(calculate(a,b,op));
}
if (ch != ')') {
opStack.push(ch);
} else {
opStack.pop();
}
}
}
}
while (!opStack.empty()) {
int b = numStack.pop();
int a = numStack.pop();
char op = opStack.pop();
numStack.push(calculate(a,b,op));
}
System.out.println(numStack.peek());
其中compare()
和calculate()
是两个辅助函数,实现比较运算符优先级和计算运算符操作的功能。
第三步:运行结果示例
假设输入表达式为(10+20)*3-15/5
,则运行结果如下:
请输入计算表达式:
(10+20)*3-15/5
75
再假设输入表达式为2+(3*4/(2-1))
,则运行结果如下:
请输入计算表达式:
2+(3*4/(2-1))
14
总结
通过上述步骤,我们可以用Java实现一个简单的计算器,包括输入表达式和计算表达式结果两个模块,并实现了栈的数据结构,进一步了解Java的用法及语言特性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现一个简单计算器 - Python技术站