999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Split分割技術的計算器系統的設計與實現

2022-04-22 11:21:16趙素萍胡雪鋒
現代計算機 2022年3期
關鍵詞:程序微信用戶

趙素萍,胡雪鋒,賀 強

(晉中信息學院大數據信息工程學院,晉中 030800)

0 引言

傳統的計算器項目中,表達式計算一般采用棧的數據結構來實現,即當用戶輸入一個數、輸入一個運算符,輸入的數壓入num棧,輸入的運算符壓入op棧。每次輸入的運算符在壓棧之前,都需要判斷op棧是否為空,為空則入棧,不為空則進行如下操作:

(1)判斷棧頂元素與當前運算符的優先級,若棧頂元素的優先級高,則進行(2),否則執行步驟3。

(2)需要先從num棧彈出兩個元素,從op棧彈出一個元素進行計算,后將計算結果壓入num棧,轉入(1)繼續循環判斷。

(3)運算符壓棧,繼續后續操作。

符號棧為空時,num棧只有一個元素,即為運算結果,直接輸出即可。

該方法的局限性是要求操作數只能是一位,若要實現多位數的運算需要找到上一個輸入的字符是否為數值型數據,且將num出棧并將棧頂元素乘10,加上當前輸入的數再次入棧。本來使用棧就比較復雜,現又需要不停的進行壓棧和出棧操作,同時需要將表達式作為字符串存起來。刪除操作也較復雜,需要判斷當前刪的是運算符還是數,運算符可以直接刪除,數的話需要判斷數是幾位數,多位數需要出棧,除10取整后再入棧。

若直接對字符串進行操作,就可以省去很多入棧出棧的操作。

1 微信小程序

微信小程序是2017年才開始運行的,并以飛快的速度發展壯大。微信小程序有手機原生APP所不具備的優點,即無需安裝、無需升級、無需卸載、不占手機存儲空間、用完即走。在一些用戶使用頻率很少的場合,微信小程序發揮了他的巨大作用。據不完全統計,僅2020年一年,微信小程序中健康碼的服務用戶超過8億,其中用戶累計出示健康碼的次數則超過了200億次。正是由于微信小程序用完即走的這一特點,用戶才在僅需要出示健康碼這種低頻事件中使用了微信小程序。而計算器也是低頻事件,人們僅在很少的時候需要計算,完全可以將原生APP替換。

2 表達式計算

向字符串每輸入一個數字,或刪除字符串的最后一個字符時,都會將表達式進行分割并計算。

2.1 表達式分割

JavaScript的Split(參數1,參數2)函數會實現字符串的分割,參數1可以是字符串也可以是正則表達式,由于我們要用的分割字符不是一個,如要求得數字數組,分割字符分別是‘+’,‘-’,‘*’,‘/’,為了實現小數的精準操作,分割字符還加入了‘.’,當用戶輸入的是‘1.+’時,需要將字符串修改為‘1.0+’或‘1+’。所以此處的參數1只能是正則表達式。JavaScript正則表達式的語法為‘/’開始‘/’結束。由此可見,將字符串表達式分割為數值型數組的語法為numbers=express.split(/[+-÷×.]/),分割后的結果會存到num數組中。將表達式分割為運算符數組的語法為options=express.split(/[d]/),正則表達式中‘d’表示的是所有的數字型字符,即0到9,分割后的結果會存到運算符數組op?tions數組中。

分割后的數組中會有很多的空字符串的數組元素,針對多位數的分割操作,options數組中有很多的空格。如數字12按正則表達式“/[d]/”分割,因為“_1_2_”中的“_”即為空格,所以options有3個元素,都為空格,即[‘’,‘’,‘’]。舉例說明:如12+34×56,numbers數組為[‘’,‘12’,‘34’,‘56’,‘’],options數組為[‘’,‘’,‘+’‘’‘×’,‘’,‘’]。由此可見,Numbers數組只需要將首尾的空格去掉即可,而options數組不僅要刪除首尾的空格,還需要遍歷數組所有內容,將每一個空字符串都刪除。

2.2 刪除多余空字符串

刪除數組中空字符串使用Array.splice(參數1,參數2,參數3…n)函數,參數1為數組中的數組元素的index值,參數2為刪除的數組元素的個數,剩下的參數為新插入的數組元素。

由于numbers數組好操作,只需要刪除首尾的兩個空字符串即可。

Options數組中會有多個空字符串,按數字分割則為_1_2_3_4+3_3_。字符串中的_即為so數組中的空字符串,so為[’,‘’,‘*’,‘+’,‘’],需要去除字符串數組中的空字符串,需要注意的是,當數組去掉一個元素以后,相當于后面的內容已經全部往前移了一個位置,如果此時仍讓循環變量+1,則下一次的循環項相對于本次循環項則前進了兩個位置。舉例說明,若so為[‘’,‘’,‘*’,‘+’,‘’],第一次循環so變為[‘’,‘*’,‘+’,‘’],循環變量的值變為1,直接對‘*’這一項進行操作,導致so的第一項‘’漏掉了,所以每次刪除掉一個空字符串數組項后,循環變量需要自減1,具體代碼如下:

2.3 運算符優先級計算

得到數組后即可進行計算了。先取兩個數字與一個運算符進行計算,即數字numbers[i]和numbers[i+1]和options[i],計算完需要刪除num?bers[i+1]和options[i]。舉例說明“3+2*6”,初始值為sn[3,2,6],options[+,*]。首先需要計算的是乘除運算,乘除運算需要從左往右計算,所以使用循環從左往右判斷,是乘法則先乘,否則先除,取數字2和6,取運算符*進行計算,2變為12,刪除6,刪除*,運算結果應為num?bers[3,12],options[+]。同前所述,每次在循環體中刪除元素后,都需要將循環變量自減1。

其中n1和n2為取出的兩個數。當運算符為‘×’,計算時需要使用計算機編程語言使用的乘號‘*’。為了實現從左到右計算,并實現優先級,所以需要從左到右判斷每一個字符,先進行乘除運算,后再進行加減運算。代碼與乘除相識,只是運算符不同而已。

最后當numbers數組只有一個數組元素時,只需要將該元素顯示在顯示屏上即可。

為了更好的觀察計算機的計算過程,在每次計算時都在console控制臺將數組顯示出來,如表達式“2-3×5÷8”,先計算3×5,刪除5和運算符×,將3修改為15。再計算15÷8,刪除8與運算符÷,修改15為1.875。最后計算2-1.875,最后結果為0.125。刪除運算符-。當options數組為空即可停止運算輸出顯示結果。

3 數據綁定

該功能的實現應用的主要技術是數據綁定,在微信小程序中,數據綁定的語法是{{ex?press}},其中express可以是普通的變量,可以是條件、屬性、關鍵字等。數據綁定常用的場合主要分為顯示結果和改變樣式兩種:

3.1 表達式與計算結果的顯示

如表達式的顯示效果,用戶每單擊一個按鈕都會改變表達式的值。index.wxml文件中在需要顯示的地方添加代碼{{express}}。index.js文件中在data的屬性值區域添加變量express,并賦初始值。當用戶單擊按鈕時修改該變量的值,需要注意的是,若要實現數據綁定,不能通過簡單的賦值表達式達到想要的效果,需要使用setData(參數)函數實現,其中參數為json格式的對象類型,即鍵值對。具體代碼為:this.set?Data({express:之前的表達式+n}),其中n為用戶當前按鈕傳遞給后臺的值。

3.2 放大處理改變樣式

數據綁定的內容可采用三元表達式,index.wxml文件中在需要顯示的組件中添加style的屬性值,通過用戶在后臺給isequal變量賦的值來決定顯示結果的字體大小,具體代碼如下:style=“font-size:{{isequal?60:(result.length>10?30:50)}}px;”>。其中當isequal為真時,字體設置為60 px,否則如果字符串長度大,則字體小。同上所述,data中添加isequal變量,并賦初值為false,當用戶單擊等于操作時,通過setdata方法將該變量賦值為true。需要注意的是,當用戶單擊除了等于號外的任何按鈕時,都需要將該值修改為false,否則容易出現字體一直變大的狀態。

4 測試與維護

通過不斷的測試、調試與維護。計算器在手機上運行界面如圖1所示。

圖1 微信小程序計算器

為了讓讀者更好的看到計算機的工作流程,特意將數組內容在控制臺輸出,如圖2所示。

圖2 console控制臺實時監測運算過程

為了讓讀者更好的體驗該小程序的運行效果,同時針對小程序中存在的不足,也歡迎讀者提出您的寶貴意見。讀者可以使用微信掃一掃功能運行計算器小程序。二維碼如圖3所示。

圖3 計算器小程序的二維碼

5 結語

經過一周的編程與不斷的測試調試,目前該項目已經是2.1版本,所有微信用戶可以掃碼使用,實現可以處理字符串表達式的,具有優先級處理功能的計算器。不論是頁面的美觀度、用戶的體驗度,還是功能的正確性、完善性與代碼的健壯性,都能滿足專業的要求。

猜你喜歡
程序微信用戶
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
微信
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
微信
微信
主站蜘蛛池模板: 午夜限制老子影院888| 久草国产在线观看| 亚洲精品第1页| 日韩欧美网址| 99资源在线| 国产欧美日韩另类| 国产农村1级毛片| 女同久久精品国产99国| 亚洲无卡视频| 久久精品国产在热久久2019| 国产原创自拍不卡第一页| 一级爱做片免费观看久久 | a毛片基地免费大全| 国产成人精品免费视频大全五级 | 欧美亚洲日韩不卡在线在线观看| 色综合五月婷婷| 色欲综合久久中文字幕网| 日韩欧美中文字幕在线韩免费| 免费午夜无码18禁无码影院| 国产精品思思热在线| 欧美另类第一页| 91美女视频在线| AV无码无在线观看免费| 国产SUV精品一区二区6| 国产男人天堂| V一区无码内射国产| 色噜噜在线观看| 九九免费观看全部免费视频| 久久久久亚洲Av片无码观看| 毛片免费视频| 黄色三级毛片网站| 最新日韩AV网址在线观看| 亚洲Va中文字幕久久一区| 亚洲人成网址| 日本成人不卡视频| 欧美啪啪网| 九色最新网址| 亚洲综合欧美在线一区在线播放| 香蕉久久永久视频| 亚洲精品久综合蜜| 国产精品大白天新婚身材| 国产玖玖玖精品视频| 一本色道久久88综合日韩精品| 911亚洲精品| 91福利在线看| 国产精品网址在线观看你懂的| 天天操精品| 国产精品理论片| 草草线在成年免费视频2| 欧美高清日韩| 国产精品尤物铁牛tv| 国产成人1024精品| 在线观看国产网址你懂的| 综合五月天网| 青青草原国产精品啪啪视频| 国产精品尤物在线| 综合色88| 日本不卡在线| 高h视频在线| 国产成人精品18| 亚洲精品无码AⅤ片青青在线观看| 国产最新无码专区在线| 一级黄色片网| 国产毛片高清一级国语 | 亚洲欧洲日本在线| 九九九国产| 麻豆国产精品一二三在线观看| 精品福利一区二区免费视频| 中国美女**毛片录像在线| 亚洲 欧美 偷自乱 图片| 国产永久在线观看| 全部无卡免费的毛片在线看| 国产精女同一区二区三区久| 在线免费亚洲无码视频| 91久久精品国产| 在线看片免费人成视久网下载| 日韩毛片免费视频| 国产亚洲精品97在线观看 | 亚洲无码视频图片| 亚洲色图欧美激情| 黄色国产在线| 99草精品视频|