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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java全面的计算器代码_Java实现计算器的代码

發(fā)布時(shí)間:2024/10/14 java 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java全面的计算器代码_Java实现计算器的代码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

用java 實(shí)現(xiàn)的計(jì)算器,原理看代碼注釋,具體內(nèi)容如下

public class mycalculator {

public static void main(string[] args) {

string obj = "6+(8/2)+6/3+1*8 + 30";

arraylist arraylist = strformat(obj);

system.out.println(obj + "=" + calculator(arraylist));

}

/**

* 采用后續(xù)表達(dá)式計(jì)算結(jié)果

* 1、當(dāng)前字符串為數(shù)字時(shí),直接入棧

* 2、當(dāng)前字符串為計(jì)算符時(shí),取出棧中的前兩個(gè)計(jì)算

* 3、將計(jì)算結(jié)果再放入到棧中,棧中最后剩余的一個(gè)元素就是要求的結(jié)果

*/

private static int calculator(arraylist obj) {

arraylist result = transform(obj);

system.out.println(result);

stack stack = new stack<>();

for (int i = 0; i < result.size(); i++) {

string symbol = result.get(i);

if (isdigital(symbol)) { //數(shù)字直接入棧

stack.push(integer.parseint(symbol));

} else { // 處理操作符

int num1, num2;

num1 = stack.pop(); //取出兩個(gè)數(shù)

num2 = stack.pop();

switch (symbol) {

case "+":

stack.push(num2 + num1);

break;

case "-":

stack.push(num2 - num1);

break;

case "*":

stack.push(num2 * num1);

break;

case "/":

stack.push(num2 / num1);

break;

default:

break;

}

}

}

return stack.pop();

}

/**

* 中序遍歷改為后續(xù)遍歷

*/

private static arraylist transform(arraylist arraylist) {

stack stack = new stack<>();

arraylist result = new arraylist<>();

for (int index = 0; index < arraylist.size(); index++) {

string symbol = arraylist.get(index);

if (isdigital(symbol)) { //如果是數(shù)字直接輸出

result.add(symbol);

} else if (symbol.equals(")")) {

string tmp;

while (!(tmp = stack.pop()).equals("(")) { // 匹配成功后停止

result.add(tmp);

}

} else {

if (stack.isempty()) {

stack.push(symbol);

continue;

}

string tmp = stack.peek();

while (outpriority(symbol) <= inpriority(tmp)) { //優(yōu)先級(jí)小于棧內(nèi)優(yōu)先級(jí),一直出棧

result.add(tmp);

stack.pop();

if (stack.isempty()) {

break;

}

tmp = stack.peek();

}

stack.push(symbol);

}

}

//將剩余的出棧

while (!stack.isempty()) {

result.add(stack.pop());

}

return result;

}

/**

* 首先對(duì)string 進(jìn)行格式化 轉(zhuǎn)化成arraylist

* @param src 3*5+8;

* @return arraylist 3 * 5 + 8

*/

private static arraylist strformat(string src) {

if (src == null || src.equals("")) {

return null;

}

arraylist arraylist = new arraylist<>();

stringbuilder comchar = new stringbuilder();

for (int i = 0; i

char ch = src.charat(i);

if (ch == ' ') {

continue; //去除空格

}

if (!character.isdigit(ch)) {

if (!comchar.tostring().trim().equals("")) {

arraylist.add(comchar.tostring().trim());

comchar.delete(0, comchar.length());

}

arraylist.add(ch + "");

continue;

}

comchar.append(ch);

}

if (!comchar.tostring().trim().equals("")) {

arraylist.add(comchar.tostring().trim());

}

return arraylist;

}

/**

* 判斷是否為數(shù)字

* @param symbol 782 或者 + - * /

* @return true or false

*/

private static boolean isdigital(string symbol) {

return !symbol.equals("+") && !symbol.equals("-")

&& !symbol.equals("*") && !symbol.equals("/")

&& !symbol.equals("(") && !symbol.equals(")");

}

private static int inpriority(string ch) {

switch (ch) {

case "+":

case "-":

return 2;

case "*":

case "/":

return 4;

case ")":

return 7;

case "(":

return 1;

default:

return 0;

}

}

private static int outpriority(string ch) {

switch (ch) {

case "+":

case "-":

return 3;

case "*":

case "/":

return 5;

case ")":

return 1;

case "(":

return 7;

default:

return 0;

}

}

}

以上全部為本篇文章的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持萬(wàn)仟網(wǎng)。

希望與廣大網(wǎng)友互動(dòng)??

點(diǎn)此進(jìn)行留言吧!

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的java全面的计算器代码_Java实现计算器的代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。