PS:本身寫的,自測試OK,供你們參考。java
補充:數據解析的過程,評論區有更好的處理方式,可參考。數組
/*
* 輸入一個表達式,3*8+7-2,沒有括號 輸出結果
*/app
/* 本程序暫不考慮容錯處理 */測試
1 import java.util.Scanner; 2 3 public class Calculator { 4 5 /* 例如:表達式 3*8+7-2中,dataNum=4,opNum=3 */ 6 private static int daNum = 0; //表達式中數據個數 7 private static int opNum = 0; //表達式中運算符個數 8 9 public static void main(String[] args) { 10 11 System.out.println("請輸入運算表達式(例如:3*8+7-2):"); 12 Scanner s = new Scanner(System.in); 13 //String str = s.nextLine().toString(); 14 char[] ch = s.nextLine().toCharArray(); 15 s.close(); 16 StringBuffer sbOP = new StringBuffer(); 17 StringBuffer sbDA = new StringBuffer(); 18 19 int dataIndex = 0; 20 int[] data = new int[32]; // 限定能處理的最大數據個數爲32 21 22 for(int i = 0; i < ch.length; i++) 23 { 24 if(('+' == ch[i])||('-' == ch[i])||('*' == ch[i])||('/' == ch[i])) 25 { 26 sbOP.append(ch[i]); 27 opNum++; 28 for(int j = dataIndex; j < i; j++) 29 { 30 sbDA.append(ch[j]); 31 } 32 data[daNum++] = Integer.parseInt(sbDA.toString()); 33 sbDA.delete(0, sbDA.length()); //清空sbDA 34 dataIndex = i+1; 35 } 36 } 37 for(int j = dataIndex; j < ch.length; j++) 38 { 39 sbDA.append(ch[j]); 40 } 41 data[daNum++] = Integer.parseInt(sbDA.toString()); 42 int[] da = new int[daNum]; //數值數組 43 for(int i = 0; i < daNum; i++) 44 { 45 da[i] = data[i]; 46 //System.out.println("da:"+da[i]); 47 } 48 char[] op = sbOP.toString().toCharArray(); //運算符數組 49 50 System.out.println("="+cal(da, op)); 51 } 52 53 private static int cal(int[] da, char[] op) { 54 55 if(1 == daNum) 56 { 57 return da[0]; 58 } 59 60 // 初始化 標示因此da值都是有效的 61 boolean[] flag = new boolean[daNum]; 62 for(int i = 0; i < daNum; i++) 63 { 64 flag[i] = true; 65 } 66 67 while(1 != daNum) 68 { 69 // 乘除運算 70 for(int i = 0; i < opNum; i++) 71 { 72 if('*' == op[i]) 73 { 74 da[i+1] = da[i] * da[i+1]; 75 flag[i] = false; 76 daNum--; 77 } 78 if('/' == op[i]) 79 { 80 da[i+1] = da[i] / da[i+1]; 81 flag[i] = false; 82 daNum--; 83 } 84 } 85 86 // 加減運算 87 int index = 0; 88 for(int i = 0; i < opNum; i++) 89 { 90 index = i+1; 91 if('+' == op[i]) 92 { 93 while(!flag[index]) 94 { 95 index++; 96 } 97 da[index] = da[i] + da[index]; 98 flag[i] = false; 99 daNum--; 100 } 101 if('-' == op[i]) 102 { 103 while(!flag[index]) 104 { 105 index++; 106 } 107 da[index] = da[i] - da[index]; 108 flag[i] = false; 109 daNum--; 110 } 111 } 112 } 113 114 return da[opNum]; 115 } 116 }