화 웨 이 온라인 테스트 문제 (표현 식 연산 - 자바)
15036 단어 자바
보충: 데이터 분석 과정, 평론 구역 에 더 좋 은 처리 방식 이 있 으 니 참고 할 수 있 습 니 다.
/ * 표현 식 을 입력 하 십시오. 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 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.