JAVA對只含有乘與加的表示式計算
題目來源2018.4.25拼多多後端開發實習筆試:
題目簡化描述:對於只含有+與*的表示式進行,按“順序”計算【從左往右依次計算】以及按照“正常”方式計算。
例如:1*1+2*2
按照順序計算=6.
按正常方式計算=5
程式碼如下:
主程式:
public static void main(String[] arg){
String opeStr="1+2*3*4+5";
char[ ] opeStrChar=opestr.toCharArry();
int orderResult=orderCal(); // 順序計算
int normalResult=normalCal();// 正常計算
}
// 順序計算
public static int orderCal(char[] opeStr)
{
// 如果只有一個值,則直接返回值。如表示式為1,則直接返回運算結果1.
if (opeStr.length == 0)
{
// 減去48是為了將字元值轉化為整數值
return opeStr[0] - 48;
}
Stack<Integer> stack = new Stack<>();
// 將第一個值進棧
stack.push(opeStr[0] - 48);
// 迴圈從i=1開始,因為i=0時將會導致opeStr[i - 1]陣列越界。
for (int i = 1; i < opeStr.length; i++)
{
// i%2==0表示:opeStr[i]是數字而不是運算子號
if (i % 2 == 0)
{
// 將數值入棧
stack.push(opeStr[i] - 48);
// opeStr[i - 1]:判斷該數值前一位的符號是什麼
if (opeStr[i - 1] == '*')
{
// 將*號前後的資料出棧,並相乘,將乘積入棧
stack.push(stack.pop() * stack.pop());
}
else
{
// 將+號前後的資料出棧,並相加,將求和結果入棧
stack.push(stack.pop() + stack.pop());
}
}
}
// 最終棧內只有一個值,這個值就是最終的求和結果
return stack.pop();
}
// 正常計算,思路是:將乘法先計算,將加法資料壓到棧中最後進行統一計算。
public static int normalCal(char[] opeStr)
{
if (opeStr.length == 1)
{
return opeStr[0] - 48;
}
Stack<Integer> stack = new Stack<>();
stack.push(opeStr[0] - 48);
for (int i = 1; i < opeStr.length; i++)
{
if (i % 2 == 0)
{
stack.push(opeStr[i] - 48);
if (opeStr[i - 1] == '*')
{
// 將乘法左右的資料出棧,並求乘積,並將結果入棧
stack.push(stack.pop() * stack.pop());
}
}
}
int sum = 0;
// 遍歷stack,棧內的元素都是待加的元素,累加,即可求得最終值
for (Integer integer : stack)
{
sum += integer;
}
return sum;
}
}
相關推薦
JAVA對只含有乘與加的表示式計算
題目來源2018.4.25拼多多後端開發實習筆試:題目簡化描述:對於只含有+與*的表示式進行,按“順序”計算【從左往右依次計算】以及按照“正常”方式計算。例如:1*1+2*2按照順序計算=6.按正常方式計算=5程式碼如下:主程式:public static void main
java對象創建與內存模型總結
對象的引用 創建 生命周期 運行時 強制 地址 class文件 發生 停止 1、JVM管轄的內存大致分為三個邏輯部分:java棧(Heap)、java堆(JavaStack)和方法區(MethodArea)。在JVM啟動時創建,關閉時全部回收。 棧、本地方法棧、
對Java對象的認識與理解
創建類型 鞏固 當我 com 編寫 回收 jpg 回收機制 span 今天是我學習編程以來第一次寫博客,記下平日學習所得,本來這幾日都在學習web框架 但覺得梳理一下之前所學很有必要。畢竟之前學習Java感覺很粗略只是以考試為目的。所以就以《Thinking in
java對時間進行天數的加減
/** * 對日期進行加減操作 * @param date 要進行加減天數的日期 * @param addOrMinus 對日期加減天數(eg:加一天:1 減一天:-1) * @return * @throws ParseException */ public static
java對日期Date類進行加減運算、年份加減,月份加減
日期比較:簡單的比較可以以字串的形式直接比較,也可使用java.sql.Date.valueOf("2007-03-08").compareTo(java.sql.Date.valueOf("2007-03-18")) 方式來比較日期的大小.也可使用java.util.Date.after(java.util
淺談Java 7的閉包與Lambda表示式之優劣
前幾天Oracle推出了Java 7官方的閉包與Lambda表示式的第一個實現,這基本上也是最終在正式版中的樣式了。看了這個實現之後,我的第一感覺便是“醜”,當然不排除這是因為看慣了其他語言中實現的緣故。後來再仔細看了看又想了想,發現Java 7的實現也並非毫無可取之處,但似乎又感到某些做法上有一些問
演算法題:對只含有0,1,2三個元素的陣列排序,時間複雜度O(n)
題目: 將元素均為0、1、2的陣列排序,時間複雜度O(n)。 思路: 方法1:通過三個下標遍歷一遍實現的方法。 p1從左側開始,指向第一個非1的數字;p3從右側開始,指向第一個非3的數字。 p2從p1開始遍歷,如果是2,p2繼續遍歷,直到p2遇到1或者3 如果遇到
Java對日期Date類進行加減運算,年份加減,月份加減
Date d=new Date(); SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); System.out.println("今天的日期:"+df.format(d)); S
Java對日期Date類進行加減運算,年月日,時分秒
第一種,知道日期,如2018051109144 String str=txnTime; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");/
JAVA對字串的壓縮與解壓縮
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.GZIPInputStre
Java對字串的壓縮與解壓
package com.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.uti
java對Linux系統的CPU利用率的計算和記憶體資訊的獲取
程序檔案系統,procfs,是一個偽檔案系統,它允許對一些非傳統意義上的檔案通過標準檔案I/O介面進行訪問。procfs將Solaris核心程序架構進行了抽象,當前系統中所有執行著的程序會在/proc/目錄下有所體現。/proc/目錄下的物件不是真實磁碟檔案,這
java對象與map對象相互轉換
map對象 spa tac 互轉 pro != ces getclass ash 1 /** 2 * 使用org.apache.commons.beanutils進行轉換 3 */ 4 class A { 5
java的單例設計模式(對象的延時加載)考試專用
clas pac ack 延時加載 專用 public get private static java的單例設計模式(對象的延時加載) ,稱為:懶漢式 考試專用例:package day6;public class Single2 { //考試專用 ,對象的延時加
Json對象與Json字符串的轉化、JSON字符串與Java對象的轉換
debug pos type 需要 collect ie8 rst toc fire Json對象與Json字符串的轉化、JSON字符串與Java對象的轉換 一.Json對象與Json字符串的轉化 1.jQuery插件支持的轉換方式: $.parseJSON( json
Java對象與JSON互相轉換jsonlib以及手動創建JSON對象與數組——(二)
ring lnl tft sem mkf ted family sae key 首先聲明一下,jsonlib轉換與GSON相比太差勁了,操作不是一般的繁瑣。GSON可以直接轉換成各種集合與對象類型。強烈推薦使用GSON。而且GSON一個方法就可以解決,
java對象與json對象之間的轉換
字符 class new jar包 lib num round word out jar包:import net.sf.json.JSONObject; 1.解析json字符串 將json字符串轉換為json對象,然後再解析json對象:。JSONObjectjsonObj
轉-Java基礎深入解析——類與對象
不同的 共享數據 style 使用 內容 類型 取出 作用 system 轉自CSDN博客,u010425776,http://m.blog.csdn.net/u010425776/article/details/46932867 成員變量與局部變量的區別 1.成員變量定義
01. Java對象的序列化與反序列化簡介
語音 log -c object height 通訊 圖片 二進制 進程 Java對象的序列化與反序列化 ; 給大家講解一下什麽是序列化 & 反序列化 當兩個進程進行遠程通訊的時候,彼此相互可以發送各種類型的數據,如文本,圖片,語音和視頻等無論是任何
JSONUtil(JAVA對象/List與json互轉,xml與json互轉)
transpose boolean ngs final span arraylist setname clas pro 1 package com.chauvet.utils.json; 2 3 import java.io.BufferedReader;