java计算加减表达式_【Java】计算加减乘除数学公式(简单计算器)含小数
package calculation;
/*import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Stack;*/
import java.util.*;
public class calculation {
private static List parseToSuffixExpression(List expressionList) {
//創建一個棧用于保存操作符
Stack opStack = new Stack<>();
//創建一個list用于保存后綴表達式
List suffixList = new ArrayList<>();
for(String item : expressionList){
//得到數或操作符
if(isOperator(item)){
//是操作符 判斷操作符棧是否為空
if(opStack.isEmpty() || "(".equals(opStack.peek()) || priority(item) > priority(opStack.peek())){
//為空或者棧頂元素為左括號或者當前操作符大于棧頂操作符直接壓棧
opStack.push(item);
}else {
//否則將棧中元素出棧如隊,直到遇到大于當前操作符或者遇到左括號時
while (!opStack.isEmpty() && !"(".equals(opStack.peek())){
if(priority(item) <= priority(opStack.peek())){
suffixList.add(opStack.pop());
}
}
//當前操作符壓棧
opStack.push(item);
}
}else if(isNumber(item)){
//是數字則直接入隊
suffixList.add(item);
}else if("(".equals(item)){
//是左括號,壓棧
opStack.push(item);
}else if(")".equals(item)){
//是右括號 ,將棧中元素彈出入隊,直到遇到左括號,左括號出棧,但不入隊
while (!opStack.isEmpty()){
if("(".equals(opStack.peek())){
opStack.pop();
break;
}else {
suffixList.add(opStack.pop());
}
}
}else if(".".equals(item)){
//System.out.print('a');
suffixList.add(item);
}else {
throw new RuntimeException("有非法字符!");
}
}
//循環完畢,如果操作符棧中元素不為空,將棧中元素出棧入隊
while (!opStack.isEmpty()){
suffixList.add(opStack.pop());
}
return suffixList;
}
/**
* 判斷字符串是否為操作符
* @param op
* @return
*/
public static boolean isOperator(String op){
return op.equals("+") || op.equals("-") || op.equals("*") || op.equals("/");
}
/**
* 判斷是否為數字
* @param num
* @return
*/
public static boolean isNumber(String num){
return num.matches("^([0-9]{1,}[.][0-9]*)$") || num.matches("^([0-9]{1,})$");
}
/**
* 獲取操作符的優先級
* @param op
* @return
*/
public static int priority(String op){
if(op.equals("*") || op.equals("/")){
return 1;
}else if(op.equals("+") || op.equals("-")){
return 0;
}
return -1;
}
/**
* 將表達式轉為list
* @param expression
* @return
*/
private static List expressionToList(String expression) {
int index = 0;
List list = new ArrayList<>();
do{
char ch = expression.charAt(index);
if(ch!=46 && (ch <= 47 || ch >= 58)){
//是操作符,直接添加至list中
index ++ ;
list.add(ch+"");
}else{
//是數字,判斷多位數的情況
String str = "";
while (index < expression.length() && (expression.charAt(index) >47 && expression.charAt(index) < 58 || expression.charAt(index)==46)){
str += expression.charAt(index);
index ++;
}
list.add(str);
//System.out.println(str);
}
}while (index < expression.length());
return list;
}
/**
* 根據后綴表達式list計算結果
* @param list
* @return
*/
private static double calculate(List list) {
Stack stack = new Stack<>();
for(int i=0; i
String item = list.get(i);
if(item.matches("^([0-9]{1,}[.][0-9]*)$") || item.matches("^([0-9]{1,})$")){
//是數字
stack.push(Double.parseDouble(item));
}else {
//是操作符,取出棧頂兩個元素
double num2 = stack.pop();
//System.out.print(num2);
double num1 = stack.pop();
double res = 0;
if(item.equals("+")){
res = num1 + num2;
}else if(item.equals("-")){
res = num1 - num2;
}else if(item.equals("*")){
res = num1 * num2;
}else if(item.equals("/")){
res = num1 / num2;
}else {
throw new RuntimeException("運算符錯誤!");
}
stack.push(res);
}
}
return stack.pop();
}
public static boolean isInt(double calculateResult){
double n = calculateResult - (int)calculateResult;
if(n!=0){
return true;
}else{
return false;
}
}
public static void main(String []args){
Scanner sc = new Scanner(System.in);
String expression = sc.nextLine();
List expressionList = expressionToList(expression);
//System.out.println("中綴表達式轉為list結構="+expressionList);
//將中綴表達式轉換為后綴表達式
List suffixList = parseToSuffixExpression(expressionList);
//System.out.println("對應的后綴表達式列表結構="+suffixList);
//根據后綴表達式計算結果
double calculateResult = calculate(suffixList);
if(isInt(calculateResult)){
System.out.printf(expression+"=%.2f\n",calculateResult);
}else{
System.out.printf(expression+"="+ (int)calculateResult);
}
sc.close();
}
}
總結
以上是生活随笔為你收集整理的java计算加减表达式_【Java】计算加减乘除数学公式(简单计算器)含小数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 延迟发布?苹果新Studio Displ
- 下一篇: 全球CPU出货量同比下降达34% 英特尔