日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java计算加减表达式_【Java】计算加减乘除数学公式(简单计算器)含小数

發布時間:2023/12/15 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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】计算加减乘除数学公式(简单计算器)含小数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。