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];
}
}
留言列表