華為上機練習題--計算運算式

來源:互聯網
上載者:User

標籤:java   華為   演算法   解決方案   

題目:

輸入一個運算式,沒有括弧,數字小於0-9之間,輸出計算結果,所有的中間結果化為整形。

    例如:  輸入:3+8×2/9-2  

               輸出:2  

    函數原型 

  1. public int getMyRet(String str)  


分析: 這個題目略顯高端啊, 像我這種非專業的自學者,還真沒有學過編譯原理之類的課程, 要自己實現一個這種小型的編譯器是非常困難啊, 所幸的是這個題目是用java來實現的, 而我本身也曾經看到過用java來實現這類的問題,

這類問題有一種方法就是實作類別編譯器功能的函數, 這個我是駕馭不了, 不過java還有一種比較賤的方法,就是java1.6版本後添加了一個全新的api,就是可以在java中嵌入各種指令碼語言,所以,我們可以很賤的直接使用javascript中的eval函數

直接將結果輸出就ok了!下面來看看這種比較賤的實現吧!當然大神就不要吐槽這種投機取巧的方法了!


代碼如下:

package com.wenj.test;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

/**
 * 輸入一個運算式,沒有括弧,數字小於0-9之間,輸出計算結果,所有的中間結果化為整形。

    例如:  輸入:3+8×2/9-2  

                       輸出:2  

    函數原型
    public int getMyRet(String str)  
 * @author wenj91-PC
 *
 */
public class TestCalcEq {

    public static void main(String args[]){
        String strIn = "3+8x2/9-2";
        TestCalcEq tc = new TestCalcEq();
        System.out.println(tc.getMyRet(strIn));
    }
    
    public int getMyRet(String strIn){
        String strTemp = strIn;
        strTemp = strTemp.replaceAll("x", "*"); //將x轉換為電腦做乘法運算時候的符號*
        strTemp = strTemp.replaceAll("X", "*");
        
        ScriptEngineManager sMgr = new ScriptEngineManager();
        ScriptEngine sE = sMgr.getEngineByName("js");
        
        Object result = null;
        try{
            result = (Object)sE.eval("(" + strTemp + ")");  //直接調用js的eval來計算運算式得出結果
        }catch(Exception e){
            
        }
        
        return (int)(double)result;
    }
}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.