導航:首頁 > 編程語言 > 逆波蘭式java

逆波蘭式java

發布時間:2022-05-10 19:25:37

java如何計算比較復雜的數學計算,比如有括弧同時有+-*/,順序不一定,就是一個運算公式

可以用編譯原理的思想來理解,主要用到數據結構裡面的棧和隊列。
利用棧的後進先出以及運算符號(+-*/(){} )優先順序,對運算符號進行匹配。
分兩個棧,一個是符號棧,一個是數字棧。
棧的每一次pop出一個字元,要進行校驗,如果匹配(符合運算規則)則計算,並保存結果到數據棧。

❷ 字元串形式的表達式如何計算

不知道你用的是C 還是C++
不知道你有沒有寫過計算器的程序 如果寫過的話就好辦了
首先將得到的字元串存到一個字元串數組中 然後遍歷數組 找出括弧的位置 switch case語句懂的吧 然後將括弧里的字元串提取出來再進行遍歷 找出乘法除法的位置並且進行計算 算好以後再計算加減法再算好以後再算括弧外的 同樣的順序 這樣就可以進行計算了

❸ java數據結構對逆波蘭式進行求值運算,並將結果進行輸出

ACM隊的mdd想做一個計算器,但是,他要做的不僅僅是一計算一個A+B的計算器,他想實現隨便輸入一個表達式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。
比如輸入:「1+2/4=」,程序就輸出1.50(結果保留兩位小數)

❹ java怎樣計算一個String類型的數學表達式

只有自己實現一個方法了,先將這類表達式轉換成逆波蘭式表達式,再使用棧進行計算,實現起來是有一定難度的,特別是其中還夾雜著冪、乘、除、括弧等有先後運算順序的運算符。

❺ 輸入一個字元串,包含數字和加(+)、減(-)、乘(*)、除(/)等四則運算符號,要求輸出其計算結果

入一個字元串,包含數字和加(+)、減(-)、乘(*)、除(/)等四則運算符號,符串的四則運算。給出一個字元串,包含0~9的數字和+-*/()的運算符,-僅代表減號不代表負數。

舉例如下:輸入:1+2*(3-4),輸出:-1。思路:分析字元串的合法性, 模擬四則運算規則,按照先括弧後乘除最後加減的順序計算(逆波蘭式)。

(5)逆波蘭式java擴展閱讀:

測試用例:

a.空串

b.一般輸入, 1+2*(3-4)

c.多層括弧嵌套, 1+2*((3-4)+8)

d.非法字元輸入,9+A+8

e.非法計算符號,*-20+5

f.括弧不匹配,1+2*(3-4)(

g.括弧內為空,1+2*()*9

h.除零情況,1+2*6/(3-3)

❻ java後綴表達式實現表達式求值

import java.util.Scanner;
import java.util.Stack;

public class 表達式計算 {
private static Stack<String> num = new Stack<String>();//存後綴表達式
private static Stack<String> sign = new Stack<String>();//存入符號
private static Stack<Integer> result = new Stack<Integer>();//放結果

public static void getGroup(String line){//講字元串轉換為後綴表達式
for(int i=0; i<line.length(); i++){
char c = line.charAt(i);
if((int)c>=48 && (int)c<=57){//當遇到數字的時候,判斷是不是多位數,然後在push進num
int j = i+1;
while(j<line.length() && (line.charAt(j)>=48 && line.charAt(j)<=57)){
j++;
}
num.push(line.substring(i, j));
i = j-1;
}else if(c == '('){//遇到左括弧直接存進num
sign.push(String.valueOf(c));
}else if(c == ')'){//遇到右括弧從sign中pop棧頂元素push到num知道遇到'(',然後再pop掉'('
while(!sign.peek().equals("(")){
num.push(sign.pop());
}
sign.pop();
}else{
int n = 0;
if(!sign.empty()){//如果sign中沒有元素,直接令n = 0
n = getNum(sign.peek().charAt(0));
}
int m = getNum(c);
if(m >= n){//如果當前元素的運算級別比棧頂元素運算級別要高,就直接push進sign
sign.push(String.valueOf(c));
}else{
while(m < n){//如果當前運算運算級別比sign棧頂元素運算級別要低,就將sign棧頂元素pop並且push進num,知道不符合條件
num.push(sign.pop());//輸入例子2*3+6/3的時候,這里一直報錯
if(!sign.empty()){
n = getNum(sign.peek().charAt(0));
}else{
n = 0;
}
}
sign.push(String.valueOf(c));
}
}
}
while(!sign.empty()){
num.push(sign.pop());
}
}

private static int getNum(char c){
int n = 0;
switch(c){
case '+':
case '-':
n = 1;
break;
case '*':
case '/':
n = 2;
break;
}
return n;
}

❼ java 設計演算法,計算用後綴表示法表示的算術表達式的值。

你好!
後綴表達式也稱逆波蘭表達式,其優點就在於可以方便的用棧實現表達式的值的計算。和你說一下思路吧:
·從頭讀入表達式
·如果遇到數則將其壓入棧
·如果遇到運算符,從棧中彈出棧頂連個數,實行相應運算,將結果壓入棧中
·直到表達式尾,此時棧中應該只有一個元素,即運算結果
·Over
如果對你有幫助,望採納。

❽ java整式計算,怎麼實現類似這種效果的,不要中間那個"原式="

把普通的表達式表示成逆波蘭式,然後用堆棧挨個讀取,遇到符號按照符號的定義去取前邊的倆個數字,計算完成將計算結果入棧,然後直到所有符號都運算完。你隨便搜一下堆棧表達式求值。

❾ 用Java寫的計算器的程序!不需要界面!

用java寫的計算器的程序,主要是通過控制台輸入,主要方法是使用scanner類來接收用戶從鍵盤輸入的一個算式,通過分解算式,存入兩個字元串,判斷中間的的符號,進行相應計算,如下代碼:

System.out.println("-----------------------------------");
System.out.println("請輸入一個算術表達式,如:45*23");
Scannerin=newScanner(System.in);//接收用戶從鍵盤輸入的字元
Stringstr=in.nextLine();
StringBufferbuffer=newStringBuffer();//保存左側的數字
StringBufferbuffer1=newStringBuffer();//保存右側的數字
chart='';//保存運算符
for(inti=0;i<str.length();i++){
if(str.charAt(i)=='+'||str.charAt(i)=='-'
||str.charAt(i)=='*'||str.charAt(i)=='/'){
t=str.charAt(i);//識別是什麼運算符

for(intj=i+1;j<str.length();j++){
buffer1.append(str.charAt(j));
}
break;
}else{
buffer.append(str.charAt(i));
}
}
Stringc=buffer.toString();
Stringd=buffer1.toString();
doublea=Double.parseDouble(c);
doubleb=Double.parseDouble(d);
doublesum=0;
if(t=='+'){
sum=a+b;
}
if(t=='-'){
sum=a-b;
}
if(t=='*'){
sum=a*b;
}
if(t=='/'){
sum=a/b;
}
System.out.println("程序運算...");
System.out.println(c+t+d+"="+sum);
System.out.print("-----------------------------------");

運行結果如下:

❿ Java計算字元串中的數學表達式的值演算法怎麼寫

代碼網上很多,只說說演算法吧
12+8/4-5+(3-4)

把這樣的表達式拆成:(操作數)(操作符) 、
12+
8/
4-
5+(
3-
4)
(術語叫做逆波蘭式)
默認的計算順序是從左往右,記為left。另設從右往左,記為right
設計Element類,具有 操作數 operant, 操作符operator, 操作順序 order三個屬性
用兩個先進後出的棧結構Stack<Element> a,b;
一開始所有的Element都在a中,逐個彈出計算合並值,
當遇到乘、除、括弧時計算順序改變成right,把當前結果放到b中暫存。
直到再次遇到加、減、)右括弧時,意味計算順序復位成left,先把b中的暫存結果全部合並後,再繼續算a中的剩餘數據
最後合並成一個結果值。

閱讀全文

與逆波蘭式java相關的資料

熱點內容
管家婆輝煌2加密狗挪到另一台電腦 瀏覽:760
摩托車在哪裡app看考題 瀏覽:356
蘋果5app在哪裡設置 瀏覽:737
如何查看伺服器的磁碟使用 瀏覽:165
python蒙特卡洛模型投點圖 瀏覽:330
安卓手機屬於什麼介面 瀏覽:742
微信群推廣網站源碼 瀏覽:764
九江離鷹潭源碼 瀏覽:719
python可以當作函數的返回值 瀏覽:422
地鐵逃生體驗服怎麼進入安卓 瀏覽:833
齊魯工惠app的中獎記錄在哪裡 瀏覽:759
linuxkill命令詳解 瀏覽:103
dhcp伺服器動態分配地址 瀏覽:265
門禁卡加密了能破解嗎 瀏覽:215
在哪裡下載百度網盤app 瀏覽:917
伺服器要升級什麼意思 瀏覽:831
銀行還房貸解壓方法 瀏覽:702
伺服器主機辦公如何提速 瀏覽:920
cad列印為pdf 瀏覽:418
賣手錶的app哪裡可以賣 瀏覽:55