- import java.util.Stack;
- import javax.swing.text.ChangedCharSetException;
- publicclass T {
- publicstaticvoid main(String[] args){
- System.out.print("请输入算式(测试):");
- Scanner sc=new Scanner(System.in);
- String formula=sc.nextLine();
- System.out.print(change(formula));
- }
- publicstatic Stack<String> change(String expression) {
- Stack<Character> s1=new Stack<>();s1.push('#');
- Stack<String> s2=new Stack<>();
- char[] chars=expression.toCharArray();
- StringBuffer s=new StringBuffer();
- for(int i=0;i<chars.length;i++) {
- if(Character.isDigit(chars[i])) {
- while(Character.isDigit(chars[i])||chars[i]=='.') {
- s.append(chars[i]);
- }s2.push(s.toString());
- }
- else {
- switch(chars[i]){
- case'(':s1.push(chars[i]);break;
- case')':while(!s1.peek().equals('(')){
- s2.push(s1.pop().toString());
- }
- s1.pop();break;
- case'+':
- case'-':
- case'/':
- case'*':;
- s1.push(chars[i]);
- if(get(chars[i+1])>get(chars[i])) {
- s1.push(chars[i+1]);
- }else {
- s2.push(s1.peek().toString());
- }
- }
- }
- }return s2;
- }
- publicstaticint get(char c)
- { int m=0;
- switch(c) {
- case'+':
- case'-':m=1;break;
- case'/':
- case'*':m=2;break;
- case'(':
- case')':m=0;break;
- case'#':m=-1;break;}
- return m;
- }
- }