Meal WaitPerson and Chef
import java.util.Stack;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Map;
import java.util.HashMap;
public class ArithmeticExpressionEvaluation {
private static Stack theStack;
private static char charKey=(char)97;
private static Map hashMap=new HashMap();
private static String result;
public static void main(String[] args) {
if(args.length<1) {
System.out.println(" please enter the input arithmetic expression string that needs to be evaluated."+
"the legal operators include '+', '-','*' and '/' ,and you can also add '(' and ')' ."+
"all numbers must above zero, the program doesn't support negative values now "
);
System.exit(0);
}
System.out.println("the original input is :"+args[0]);
String internalStr=processBeforeEvaluation(args[0]);
System.out.println("the internal expression is :"+internalStr);
String postfixStr= translateToPostfixExpression(internalStr);
System.out.println("the postfix expression is :"+postfixStr);
double result=evaluatePostfixExpression(postfixStr);
System.out.println("the final result is :"+result);
}
private static String processBeforeEvaluation(String input) {
Matcher legal=Pattern.compile("[^0-9.*+/\\()-]").matcher(input);
if(legal.find()) {
System.out.println("Please enter legal arithmetic expression string.");
System.exit(0);
}
StringBuffer sbuf = new StringBuffer();
Matcher m=Pattern.compile("\\d+(\\.\\d+)?").matcher(input);
while(m.find()) {
String temp=m.group(0);
hashMap.put(charKey,temp);
m.appendReplacement(sbuf,charKey+"");
charKey=(char)(charKey+1);
}
m.appendTail(sbuf);
return sbuf.toString();
}
private static String translateToPostfixExpression(String input) {
theStack=new Stack();
result="";
for(int j=0; j(); // ,
try {
for(int j=0; j=97) { //j double
theStack.push(ch);
} else {
str2 =hashMap.get(theStack.pop());
str1=hashMap.get(theStack.pop());
num2=Double.parseDouble(str2);
num1=Double.parseDouble(str1);
switch(ch) {
case '+':
interAns=num1+num2;
break;
case '-':
interAns=num1-num2;
break;
case '*':
interAns=num1*num2;
break;
case '/':
interAns=num1/num2;
break;
default :
interAns=0;
break;
} //end switch
hashMap.put(charKey,interAns+"");
theStack.push(charKey);
charKey=(char)(charKey+1);
} //end else
} //end for loop
str1=hashMap.get(theStack.pop());
interAns=Double.parseDouble(str1);
} catch(Exception e) {
System.out.println("please enter legal numbers!");
e.printStackTrace();
}
return interAns;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 다 중 스 레 드 메커니즘 의 스 레 드 생 성target 을 실행 대상 으로 지정 한 name 을 이름 으로 하고 group 에서 참조 하 는 스 레 드 그룹의 일원 으로 새 Thread 대상 을 할당 합 니 다. 이 스 레 드 가 독립 된 Runnable 실...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.