看到這道題網上給的解答都比較繁瑣,想了個想到一個簡便方法。java
首先定義一個數組棧stack[],而後掃描算術表達式,遇到「+」則將「+」後面的數壓棧,遇到「-」則將「-」後面的數乘以「-1.0」後入棧。數組
遇到「*」或者「/」後,將「*」「/」先後的數作乘除運算後覆蓋壓棧(覆蓋乘除號前入棧的那個數)。spa
最後將整個棧中的數相加即爲最終結果。java代碼以下:code
import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * @author: pricker * */ public class item1019 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); String input; List<String> result = new ArrayList<String>(); while(!(input = scan.nextLine()).equals("0")){ result.add(caculate(input)); } for(int i=0;i<result.size();i++){ System.out.println(result.get(i)); } } public static String caculate(String input){ String[] inputArray = input.split(" "); int len = 1001; double[] stack = new double[len]; int tail = 0; stack[0] = Double.valueOf(inputArray[0]); for(int i=1;i<inputArray.length;i++){ if(inputArray[i].equals("+")){ stack[++tail] = Double.valueOf(inputArray[++i]); }else if(inputArray[i].equals("-")){ stack[++tail] = -1.0*Double.valueOf(inputArray[++i]); }else if(inputArray[i].equals("*")){ stack[tail] = stack[tail]*Double.valueOf(inputArray[++i]); }else if(inputArray[i].equals("/")){ stack[tail] = stack[tail]/Double.valueOf(inputArray[++i]); } } double result = 0.0; for(int i=0;i<=tail;i++){ result += stack[i]; } DecimalFormat df = new DecimalFormat("0.00"); return df.format(result); } }