화 웨 이 온라인 테스트 문제 (표현 식 연산 - 자바)

15036 단어 자바
PS: 직접 쓴 거 예요. 테스트 OK, 참고 하 세 요.
보충: 데이터 분석 과정, 평론 구역 에 더 좋 은 처리 방식 이 있 으 니 참고 할 수 있 습 니 다.
/ * 표현 식 을 입력 하 십시오. 3 * 8 + 7 - 2, 괄호 출력 결과 가 없습니다 * /
/ * 이 프로그램 은 오류 처 리 를 고려 하지 않 습 니 다 * /
  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 }

좋은 웹페이지 즐겨찾기