Java練習二

改寫【C#】數學運算式 仍以遞迴模式並簡化演算法

程式碼如下:

import java.util.Scanner;
import java.io.*;
public class java {
       public static void main(String[] args) {
              Scanner cin = new Scanner(System.in);
              String s;
              while (cin.hasNext()) {
                      s=cin.nextLine();
                     System.out.println( Expression(s));
              }
       }
       public static String Expression(String s){
       while(s.indexOf("(")!=-1){
              int e1=s.indexOf("(");
              int e2=0;
              int count=0;
              for(int i=e1;i<s.length();i++){
                     String s1=s.substring(i,i+1);
                     if(s1.equals("("))  count++;
                     else if(s1.equals(")")){
                            count--;
                            if(count==0){
                                   e2=i;
                                   break;
                            }
                     }
              }
              s=s.substring(0,e1)+Expression(s.substring(e1+1,e2).trim())+s.substring(e2+1);
       }
       String[] ss=s.split(" ");
       int ans=0;
       int count=0;
       for(int i=0;i<ss.length;i++){
              if("*/%".indexOf(ss[i])!=-1){
                     int n1=Integer.valueOf(ss[i-1]);
                     int n2=Integer.valueOf(ss[i+1]);
                     switch (ss[i].charAt(0)) {
                            case '*':
                                   ans=n1*n2;
                                   break;
                            case '/':
                                   ans=n1/n2;
                                   break;
                            case '%':
                                   ans=n1%n2;
                                   break;
                     }
                     ss[i-1]= String.valueOf(ans);//.replace('-','~');
                     for(int j=i;j<ss.length;j++){
                            if(j<ss.length-2){ ss[j]=ss[j+2]; ss[j+2]=" ";}
                            else ss[j]=" ";
                     }
                     i--;
              }
       }
       for(int i=0;i<ss.length;i++){
              if("+-".indexOf(ss[i])!=-1){
              int n1=Integer.valueOf(ss[i-1]);
              int n2=Integer.valueOf(ss[i+1]);
              switch (ss[i].charAt(0)) {
                     case '+':
                            ans=n1+n2;
                            break;
                     case '-':
                            ans=n1-n2;
                            break;
              }
              ss[i-1]=String.valueOf(ans);
              for(int j=i;j<ss.length;j++){
                     if(j<ss.length-2){ ss[j]=ss[j+2]; ss[j+2]=" ";}
                     else ss[j]=" ";
              }
              i--;
       }
}
return ss[0];
}
}

arrow
arrow
    全站熱搜

    小新 發表在 痞客邦 留言(0) 人氣()