紧急-函数问题 各位高手,能否帮我解决一个问题!写一个函数,实现复杂的运算,比如输入(1+2)/3,怎样得出结果,支持字符串输入。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://baike.baidu.com/view/552648.htm?func=retitle 你们所说的是不是用.net做的呀,在java里面怎么做啊? 请问下,用这个逆波兰表达式做的这个函数怎么样能支持字符串和add()函数的运算呢? 这段程序只支持 正数的 + - * / () ,还不是很完善啦,负数 -X 只能通过 (0-X) 来表示! 楼主,满意了不?class Class1{ public static void main(String[] args) { System.out.println("Hello World!"); //中缀 => 后缀表达式 String s = "( 1.9 + (20 + 41) / (25 * 11) - 3 ) * 2"; //中缀 String S = ""; //后缀 char[] Operators = new char[s.length()]; int Top = -1; for (int i = 0; i < s.length(); i++) { char C = s.charAt(i); switch(C) { case ' ' : break; case '+' : //操作符 case '-' : while (Top >= 0) //栈不为空时 { char c = Operators[Top--]; //pop Operator if (c == '(') { Operators[++Top] = c; //push Operator break; } else { S = S + c; } } Operators[++Top] = C; //push Operator S += " "; break; case '*' : //操作符 case '/' : while (Top >= 0) //栈不为空时 { char c = Operators[Top--]; //pop Operator if (c == '(') { Operators[++Top] = c; //push Operator break; } else { if (c == '+' || c == '-') { Operators[++Top] = c; //push Operator break; } else { S = S + c; } } } Operators[++Top] = C; //push Operator S += " "; break; case '(' : //操作符 Operators[++Top] = C; S += " "; break; case ')' : //操作符 while (Top >= 0) //栈不为空时 { char c = Operators[Top--]; //pop Operator if (c == '(') { break; } else { S = S + c; } } S += " "; break; default : //操作数 S = S + C; break; } } while (Top >= 0) { S = S + Operators[Top--]; //pop Operator } System.out.println(S); //后缀 //后缀表达式计算 double[] Operands = new double[S.length()]; double x, y, v; Top = - 1; String Operand = ""; for (int i = 0; i < S.length(); i++) { char c = S.charAt(i); if ((c >= '0' && c <= '9') || c == '.') { Operand += c; } if ((c == ' ' || i == S.length() - 1) && Operand != "") //Update { Operands[++Top] = java.lang.Double.parseDouble(Operand) ; //push Operands Operand = ""; } if (c == '+' || c == '-' || c == '*' || c == '/') { if ((Operand != "")) { Operands[++Top] = java.lang.Double.parseDouble(Operand) ; //push Operands Operand = ""; } y = Operands[Top--]; //pop 双目运算符的第二操作数 (后进先出)注意操作数顺序对除法的影响 x = Operands[Top--]; //pop 双目运算符的第一操作数 switch (c) { case '+' : v = x + y; break; case '-' : v = x - y; break; case '*' : v = x * y; break; case '/' : v = x / y; // 第一操作数 / 第二操作数 注意操作数顺序对除法的影响 break; default : v = 0; break; } Operands[++Top] = v; //push 中间结果再次入栈 } } v = Operands[Top--]; //pop 最终结果 System.out.println(v); }} javac在编译时,都做了什么 java类中如何直接调用JSP中定义的bean实例 jsp如何实现在线的mysql数据库的备份???(在线等................) 请问jfreechart怎么画股票图 T106 晚上10:10 到济南的卧铺出让!!!!! 一个很奇怪的问题:关于struts自定义标签 用JDOM来解析和存储数据 要怎么在类中导入自己的写的接口啊,麻烦高手帮看一下 大哥谁知道哪里有WebLogic Server 7.0 下载? 在线等!!~谢谢 那里有EJB的小例程?并有相关说明 求 Struts 框架 DAO模式的分页代码 支付宝接口
class Class1
{
public static void main(String[] args)
{
System.out.println("Hello World!");
//中缀 => 后缀表达式
String s = "( 1.9 + (20 + 41) / (25 * 11) - 3 ) * 2"; //中缀
String S = ""; //后缀
char[] Operators = new char[s.length()];
int Top = -1;
for (int i = 0; i < s.length(); i++)
{
char C = s.charAt(i);
switch(C)
{
case ' ' :
break;
case '+' : //操作符
case '-' :
while (Top >= 0) //栈不为空时
{
char c = Operators[Top--]; //pop Operator
if (c == '(')
{
Operators[++Top] = c; //push Operator
break;
}
else
{
S = S + c;
}
}
Operators[++Top] = C; //push Operator
S += " ";
break;
case '*' : //操作符
case '/' :
while (Top >= 0) //栈不为空时
{
char c = Operators[Top--]; //pop Operator
if (c == '(')
{
Operators[++Top] = c; //push Operator
break;
}
else
{
if (c == '+' || c == '-')
{
Operators[++Top] = c; //push Operator
break;
}
else
{
S = S + c;
}
}
}
Operators[++Top] = C; //push Operator
S += " ";
break;
case '(' : //操作符
Operators[++Top] = C;
S += " ";
break;
case ')' : //操作符
while (Top >= 0) //栈不为空时
{
char c = Operators[Top--]; //pop Operator
if (c == '(')
{
break;
}
else
{
S = S + c;
}
}
S += " ";
break;
default : //操作数
S = S + C;
break;
}
}
while (Top >= 0)
{
S = S + Operators[Top--]; //pop Operator
} System.out.println(S); //后缀 //后缀表达式计算
double[] Operands = new double[S.length()];
double x, y, v;
Top = - 1;
String Operand = "";
for (int i = 0; i < S.length(); i++)
{
char c = S.charAt(i);
if ((c >= '0' && c <= '9') || c == '.')
{
Operand += c;
} if ((c == ' ' || i == S.length() - 1) && Operand != "") //Update
{
Operands[++Top] = java.lang.Double.parseDouble(Operand) ; //push Operands
Operand = "";
} if (c == '+' || c == '-' || c == '*' || c == '/')
{
if ((Operand != ""))
{
Operands[++Top] = java.lang.Double.parseDouble(Operand) ; //push Operands
Operand = "";
}
y = Operands[Top--]; //pop 双目运算符的第二操作数 (后进先出)注意操作数顺序对除法的影响
x = Operands[Top--]; //pop 双目运算符的第一操作数
switch (c)
{
case '+' :
v = x + y;
break;
case '-' :
v = x - y;
break;
case '*' :
v = x * y;
break;
case '/' :
v = x / y; // 第一操作数 / 第二操作数 注意操作数顺序对除法的影响
break;
default :
v = 0;
break;
}
Operands[++Top] = v; //push 中间结果再次入栈
}
}
v = Operands[Top--]; //pop 最终结果
System.out.println(v);
}
}