亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? calculatestring.java

?? 進行四則運算"+-*/^ ",并可以處理簡單變量"AB",并且具備可擴展性.
?? JAVA
字號:


import java.math.BigDecimal;   
import java.util.ArrayList;   
import java.util.List;   
import java.util.regex.Matcher;   
import java.util.regex.Pattern;   
public class CalculateString {   
	final int VARIABLE = 1;
	final int NUMBER = 2;
	public String variable;
	public double value;
	public String function;
	public int number_of_arguments;
	
	public void Variable( String variable, double value )
	{
		this.variable=variable;
	    this.value=value;
	}
	public void Function( String function, int number_of_arguments )
    {
	    this.function=function;
	    this.number_of_arguments=number_of_arguments;
    }
	
    public BigDecimal calculateString(String str)     //計算表達式
    {   
        char[] strs = str.toCharArray();          //返回輸出數組的拷貝
        Stack<String> stack = new Stack<String>();   

        for (int i = 0; i < strs.length; i++)
        {  
            String stackStr = String.valueOf(strs[i]);   //將strs中的字符轉換為字符串,并返回
            stack.push(stackStr);   //壓入棧中

            if ( ")".equals(stack.top()) )               //如果是")"繼續尋找
            {   
                String subStr = null;   
                while (!"(".equals(stack.top())) 
                {   
                    stack.pop();   
                    if (!"(".equals(stack.top())) 
                    {   
                        subStr = addEnd(subStr, stack.top());   
                    }   
                }   
                String pushStr = CalculateReversePolishExpression(subStr);   
                stack.pop();   
                stack.push(pushStr);   
            }   
  
        }   
        String resultStr = null;   
        while (stack.count != 0) 
        {   
            resultStr = CalculateReversePolishExpression(stack.toString());   
        }   
        BigDecimal result = null;   
        if (resultStr != null) 
        {   
            result = new BigDecimal(resultStr);   
        } else 
        {   
            result = BigDecimal.ZERO;   //讓result的值為0.標度為0;
        }  
	
        return result.setScale(2, BigDecimal.ROUND_HALF_UP); //返回一個 BigDecimal,其標度為指定值
    													//向"最接近的"數字舍入,如果與兩個相鄰數字的距離相等,
														//則為向上舍入的舍入模式。 
    }   
 
    public String[] matcher(String regex, String str) {   //匹配器
        Pattern pattern = Pattern.compile(regex);   //將正則表達式編譯到模式中
        Matcher matcher = pattern.matcher(str);   //創建匹配給定輸入與此模式的匹配器
        List<String> list = new ArrayList<String>();   
        while (matcher.find()) {   
            list.add(matcher.group());   
        }   
        String[] result = new String[list.size()];   
        return list.toArray(result);  
        
    }   
  
    public List<String> createReversePolishExpression(String subStr) {   //構造逆波蘭表達式
        String regex = "\\d+\\.{0,1}\\d*";   
        String[] numbers = matcher(regex, subStr);   
        String changeStr = subStr.replaceAll(regex, "0").replaceAll("\\-\\-0",   
                "-1").replaceAll("\\+\\-0", "+1").replaceAll("\\*\\-0", "*1")   //用正則表達式來匹配
                .replaceAll("\\/\\-0", "/1");   
        char[] chars = changeStr.toCharArray();   
        int index = 0;   
        List<String> list = new ArrayList<String>();  //指針列表
        
        for (int i = 0; i < chars.length; i++) {   
            String str = String.valueOf(chars[i]);   
            if ("0".equals(str)) {   
                list.add(numbers[index++]);   
            } else if ("1".equals(str)) {   
                list.add("-" + numbers[index++]);   
            } else {   
                list.add(str);   
            }   
        }   
        List<String> suffix = new ArrayList<String>();   
        Stack<String> operator = new Stack<String>();   
        for (int i = 0; i < list.size(); i++) {   
            if (!isOperatorType(list.get(i))) {   
                suffix.add(list.get(i));   
            } else {   
                if (operator.count == 0) {   
                    operator.push(list.get(i));   
                } else {   
                    while (operator.count != 0&&compare(operator.top(), list.get(i)) >= 0) {   
                        String top = operator.top();   
                        operator.pop();   
                        suffix.add(top);   
                    }    
                    operator.push(list.get(i));   
  
                }   
            }   
        }   
  
        while (operator.count != 0) {   
            suffix.add(operator.top());   
            operator.pop();   
        }  
      //  System.out.println(suffix);
        return suffix;   
    }  
 
    public String CalculateReversePolishExpression(String subStr) {   //計算逆波蘭表達式
        List<String> suffix = createReversePolishExpression(subStr);   
        Stack<Double> stack = new Stack<Double>();   
        
        for (int i = 0; i < suffix.size(); i++) 
        {   
            if (!isOperatorType(suffix.get(i))) 
            {   
            	if(!isVarableType(suffix.get(i)))
            	{
            														   //在這里要判斷是否為變量
            		stack.push(Double.valueOf(suffix.get(i)));        //是數字的話壓入棧
            	}
            	else
            	{	
            		if(suffix.get(i).equals("A"))
            		{
            			Variable("A",1);
            			stack.push(value);
            		}
            		if(suffix.get(i).equals("B"))
            		{
            			Variable("B",2);
            			stack.push(value);
            			
            		}
            	}
            } 
            else 
            {   
                Double current = stack.top();   
                stack.pop();   
                Double previous = null;   
                if (stack.count != 0) {   
                    previous = stack.top();   
                    stack.pop();   
                } else {   
                    previous = new Double(0);   
                }   
                Double result = calculate(suffix.get(i), previous, current);   
                stack.push(result);   
            }   
        }   
        return stack.top().toString();   
    }   
  
    public String addEnd(String str, String a) {   
        StringBuffer buf = new StringBuffer();   
        buf.append(a);                         //將a添加到當前字符串的尾部
        if (str != null) {   
            buf.append(str);   
        }   
        return buf.toString();                  //轉換成字符串形式
    }   
  
    public boolean isOperatorType(String str) {   //判斷操作符類型,如果是"+-*/%^"則返回true
        if (str.equals("+") || str.equals("-") || str.equals("*")   
                || str.equals("/") || str.equals("^") || str.equals("%")) {   
            return true;   
        }   
        return false;   
    }   
    public boolean isVarableType(String str) {   //判斷操作符類型,如果是"AB"則返回true
        if (str.equals("A") || str.equals("B")) 
        {   
            return true;   
        }   
        return false;   
    }   
  
    public int compare(String op1, String op2) {      //比較操作符的優先級
        Integer iop1 = getOperator(op1);   
        Integer iop2 = getOperator(op2);   
        return iop1.compareTo(iop2);   
    }   
  
    public Integer getOperator(String op) {      //定義操作符優先級
        if ("+".equals(op) || "-".equals(op)) 
        {   
            return new Integer(0);   
        }   
        if ("*".equals(op) || "/".equals(op) || "%".equals(op)) 
        {   
            return new Integer(1);   
        }
        if ("^".equals(op)) 
        {   
            return new Integer(2);   
        }
        return null;   
    }   
  
    public Double calculate(String op, Double previous, Double current) {   //各種符號的計算
        if ("+".equals(op)) 
        {   
            return previous + current;   
        }   
        if ("-".equals(op)) 
        {   
            return previous - current;   
        }   
        if ("*".equals(op)) 
        {   
            return previous * current;   
        }   
        if ("/".equals(op)) 
        {   
            return previous / current;   
        } 
        if ("%".equals(op)) 
        {   
            return previous % current;   
        } 
        if ("^".equals(op)) 
        {   
            return Math.pow(previous, current);   
        }  
        return null;   
    }   

    public static void main(String[] args) {   
        String strs = "(2^B+A*B)/3";

        BigDecimal result = new CalculateString().calculateString(strs);   
        System.out.println(result.toString());   
      
           
    }   
  
}  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品夫妻自拍| 亚洲综合色噜噜狠狠| 免费人成网站在线观看欧美高清| 色婷婷激情综合| 一区二区三区欧美日| 日韩视频不卡中文| 成人免费观看视频| 91精品国产综合久久久久久| 8x8x8国产精品| 欧美怡红院视频| 国产精品一区二区三区99 | 日韩毛片精品高清免费| 欧美无人高清视频在线观看| 色婷婷综合久久久久中文一区二区 | 成人va在线观看| 日韩电影免费在线看| 国产精品久久久久久久久图文区| 日本一区二区综合亚洲| 欧美一区二区三区男人的天堂| 成人夜色视频网站在线观看| 大桥未久av一区二区三区中文| 成人精品在线视频观看| 欧美日韩一级黄| 91麻豆123| www.欧美色图| 风间由美一区二区av101| 久久精品国产秦先生| 日本网站在线观看一区二区三区| 久久精品99国产精品日本| 懂色av一区二区在线播放| 欧洲一区二区三区在线| 成人av动漫在线| 欧美又粗又大又爽| 2021国产精品久久精品| 欧美mv和日韩mv的网站| 在线91免费看| 国产欧美日韩久久| 日本不卡视频在线| 97久久精品人人澡人人爽| 99re这里都是精品| 日韩视频免费观看高清完整版在线观看 | 日韩免费成人网| 欧美成人bangbros| 中文字幕中文字幕一区| 另类小说综合欧美亚洲| 在线观看一区日韩| 国产视频一区在线播放| 国产精品丝袜黑色高跟| 亚洲精品中文字幕在线观看| 亚洲手机成人高清视频| 国产一区二区三区久久久| 丁香婷婷深情五月亚洲| 欧美一区二区三区爱爱| 一区二区三区资源| 国产成人av自拍| 91丨九色丨国产丨porny| 欧美电影精品一区二区| 亚洲最大的成人av| 国产精品18久久久久久久久| 欧美丰满嫩嫩电影| 久久网站最新地址| 欧美a级一区二区| 色噜噜久久综合| 欧美一区二区三区影视| 夜夜嗨av一区二区三区网页 | 91性感美女视频| 久久久精品日韩欧美| 亚洲欧洲在线观看av| 亚洲黄色性网站| 国产丶欧美丶日本不卡视频| 精品国产一二三区| 国产精品久久久久久福利一牛影视| 全部av―极品视觉盛宴亚洲| 欧美久久久一区| 亚洲电影第三页| 久久福利资源站| 日韩美女一区二区三区四区| 蜜桃视频第一区免费观看| 成人免费看视频| 中文字幕五月欧美| 北岛玲一区二区三区四区| 亚洲国产精品精华液2区45| 亚洲国产精品久久久久秋霞影院 | 亚洲精品亚洲人成人网在线播放| 国产91在线看| 国产精品福利一区二区| 色婷婷激情久久| 丝袜美腿亚洲综合| 99热在这里有精品免费| 亚洲色图丝袜美腿| 欧美日韩一级二级| 全国精品久久少妇| 久久精品在这里| 色婷婷激情一区二区三区| 午夜欧美在线一二页| 99久久伊人网影院| 一区二区三区高清不卡| 欧美日韩aaaaaa| 一区二区三区在线免费视频| 欧美日韩在线不卡| 韩国女主播成人在线观看| 欧美日韩国产一级二级| 六月丁香综合在线视频| 中文字幕在线不卡一区| 欧美日韩国产一二三| 国产精品99久久久| 亚洲女子a中天字幕| av激情综合网| 日韩成人av影视| 日本一区二区动态图| 欧美日韩精品免费观看视频| 久久国内精品自在自线400部| 欧美国产日本韩| 欧美日韩一区二区三区高清| 紧缚捆绑精品一区二区| 精品国产一二三| 91搞黄在线观看| 风间由美一区二区三区在线观看| 亚洲一区二区3| 国产欧美一二三区| 欧美日韩国产首页在线观看| 国产成人在线看| 日本美女一区二区三区视频| 国产精品色哟哟网站| 精品少妇一区二区三区视频免付费| 9人人澡人人爽人人精品| 免费成人在线影院| 亚洲风情在线资源站| 国产精品视频一二三区| 久久综合色综合88| 欧美男女性生活在线直播观看| 99久久伊人网影院| 国产成人av网站| 国产一区二区伦理片| 偷窥少妇高潮呻吟av久久免费| 一区在线中文字幕| 26uuu精品一区二区三区四区在线| 99国产精品国产精品毛片| 国产精品中文字幕一区二区三区| 五月激情综合婷婷| 亚洲第一主播视频| 一二三区精品视频| 一区二区三区国产精品| √…a在线天堂一区| 日本一区二区综合亚洲| 国产日韩成人精品| 国产婷婷色一区二区三区| 久久久久久久综合| 亚洲精品在线网站| 久久久精品综合| 久久综合一区二区| 久久久久亚洲蜜桃| 久久精品亚洲乱码伦伦中文 | 欧美日韩一区二区电影| 欧美午夜一区二区三区| 欧美午夜宅男影院| 在线电影院国产精品| 91精品午夜视频| 欧美一级电影网站| 日韩欧美高清在线| 国产日韩亚洲欧美综合| 久久看人人爽人人| 国产精品初高中害羞小美女文| 国产精品久久久久久久久晋中 | 中文字幕第一区二区| 亚洲福利视频一区二区| 蜜桃视频一区二区三区| 北条麻妃一区二区三区| 日本久久一区二区| 日本伊人色综合网| 精品国精品国产| 久久久蜜臀国产一区二区| 337p粉嫩大胆噜噜噜噜噜91av | 欧美日韩1区2区| 欧美一区午夜精品| 国产日韩欧美在线一区| 最近日韩中文字幕| 午夜久久久久久| 国产一区二区主播在线| 99精品黄色片免费大全| 欧美性受xxxx| 在线电影院国产精品| 26uuu另类欧美| 亚洲午夜在线观看视频在线| 亚洲成人免费视频| 日韩欧美三级在线| 性做久久久久久免费观看| 日韩av不卡在线观看| 国产成a人亚洲| 欧美网站大全在线观看| 久久久久国产精品免费免费搜索| 亚洲午夜激情网页| 国产在线不卡一卡二卡三卡四卡| 成人国产电影网| 91精品国产综合久久久久久| 中文在线免费一区三区高中清不卡| 亚洲综合区在线| 大白屁股一区二区视频| 欧美人妇做爰xxxⅹ性高电影 | 日本久久一区二区三区|