[위 에]자바 표현 식 값 구하 기
public float evaluation(String textField) {
StringBuilder str = new StringBuilder();
Stack<Float> stk = new Stack<Float>(); //
Stack<Character> stk2 = new Stack<Character>(); //
stk2.push('#'); // '#',
char c;
//
for (int i = 0; i < textField.length(); i++) {
boolean isbeg = false;//
c = textField.charAt(i);
if ((c >= '0' && c <= '9') || c == '.') { //
str.append(c);
} else if (c == '+' || c == '-' || c == '*' || c == '/' || c == '('
|| c == ')') {
if ((c == '+' || c == '-') && stk.empty() && str.length() == 0) {
str.append(c);
isbeg = true;
} else if (str.length() != 0) {
try {
float f = Float.parseFloat(str.toString());
stk.push(f);
} catch (Exception e) {
flag = false;
return -1;
}
str.delete(0, str.length());
}
// , ,
if (judge(stk2.peek()) >= judge(c) && !isbeg) {
try {
float b = Float.parseFloat(stk.pop().toString());
float a = Float.parseFloat(stk.pop().toString());//
char c1 = stk2.pop();//
if (c != ')') {
stk2.push(c); //
}
switch (c1) {
case '+':
stk.push(a + b);
break;
case '-':
stk.push(a - b);
break;
case '*':
stk.push(a * b);
break;
case '/':
stk.push(a / b);
break;
default:
break;
}
} catch (Exception e) {
flag = false;
return -1;
}
if (c == ')') {
while (stk2.peek() != '#') {
float b = Float.parseFloat(stk.pop().toString());
try {
float a = Float
.parseFloat(stk.pop().toString());//
char c1 = stk2.pop();//
switch (c1) {
case '+':
stk.push(a + b);
break;
case '-':
stk.push(a - b);
break;
case '*':
stk.push(a * b);
break;
case '/':
// if (b == 0) {
//
// } else {
stk.push(a / b);
// }
break;
default:
break;
}
} catch (Exception e) {
flag = false;
return -1;
}
}
// stk2.pop();// ')'
stk2.pop();// '#'
stk2.pop();// '('
}
} else if (!isbeg) {
stk2.push(c);
if (c == '(') {
stk2.push('#');
}
}
} else {
flag = false;
return -1;
}
}
// ,
if (str.length() > 0) {
try {
float f = Float.parseFloat(str.toString());
stk.push(f);
} catch (Exception e) {
flag = false;
return -1;
}
str.delete(0, str.length());
}
// "("
if(stk2.peek()=='#'){
flag=false;
return -1;
}
while (stk2.peek() != '#') {
try {
float b = Float.parseFloat(stk.pop().toString());
float a = Float.parseFloat(stk.pop().toString());//
char c1 = stk2.pop();//
switch (c1) {
case '+':
stk.push(a + b);
break;
case '-':
stk.push(a - b);
break;
case '*':
stk.push(a * b);
break;
case '/':
// if (b == 0) {
//
// } else {
stk.push(a / b);
// }
break;
default:
break;
}
} catch (Exception e) {
flag = false;
return -1;
}
}
try {
return Float.parseFloat(stk.pop().toString());
} catch (Exception e) {
flag = false;
return -1;
}
}
연산 자 우선 순위 판단
//
public static int judge(char c) {
int n = 0;
switch (c) {
case '(':
n = 3;
break;
case '+':
case '-':
n = 1;
break;
case '*':
case '/':
n = 2;
break;
case ')':
n = 0;
break;
default:
}
return n;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.