以前好象学过,好象就是先写成后缀表达式,然后压栈,出栈。FILO,先进后出。栈么就是个数据结构,呵呵。
解决方案 »
- 新手求各位前辈指点
- 帮帮忙啊。我都快急死了
- 怎么将byte[]里的值赋予给int[]?
- String 对象问题。
- 怎么打包成jar文件哦?
- 把eclipse左边的工程窗口弄没了。。。
- 请指教
- 为什么无法使用JOptionPane.showMessageDialog?
- 小生不才,有几个学Thing in java 遇到的问题,请大侠帮于小生脱离苦海。 初学者
- 如何在WebLogic里面共享一个web名称?例如:将d:\test共享为:http://localhost:7001/test
- 下例中抽象类里的抽象方法怎么能直接调用?
- 关于Exception的经典问题,欢迎高手来讨论。在线等待,下午接分。
(1)怎么把如“82”这个字符转换成数字进行运算呢?
用 Integer的静态方法
int i = Integer.parseInt("82");(2)如何实现运算符的优先级呢?(3)如何确定运算符两边的数字各有多少位呢?
(1)怎么把如“82”这个字符转换成数字进行运算呢?
用 Integer的静态方法
int i = Integer.parseInt("82");(2)如何实现运算符的优先级呢?
就是四则运算的优先级,例如遇到乘法,若乘法两边没有括号,将两数相乘再压栈(3)如何确定运算符两边的数字各有多少位呢?
挨个字符的读,例如
30*50。
先读3,判断后面是运算符还是数字,下面是0,是数字,将其和30一起保存起来,再判断下一个字符,下一个字符是*,这样第一个操作数就出来了,
如:x1为当前栈顶运算符变量,如x1的优先级高于x2的优先级,将x1退栈并作为后缀表达拭
的一个单词输出。相反则x2进栈。
如A+(B-C/D)*E 到这个“-”的时候它比“(”的优先级低啊?
书上怎么写 C/D)*E 堆栈#+(- 输出 AB 这不是"-"也进栈了么?
我真的不大懂啊?自己看书不大理解,有个例子就好了。
说的好你还要为 +、-、*、/、(、)做一个优先级矩阵,运算的先后顺序靠这个矩阵来指引
比如
+ - * / ( )
+ 1 1 0 0 0 -1
- 1 1 0 0 0 -1
* 1 1 1 1 0 -1
/
(
)
……
竖排表示第一个运算符,横排表示紧接的运算符
1 表示先竖后横,0表示先横后竖,-1表示出错
其他的自己定义吧,我以前分析过这个,但是程序早就没了
自己试试吧结合堆栈操作
学了数据结构好像很猖狂我没学过数据结构 一样能解决问题
动态生成java类-->编译-->实例化-->运行 ok
public static void main(String[] args){
Stack icon=new Stack();
Stack number=new Stack();
String temp="34*23+6*7-90/3+4/5=";
String string1="";
try{
for(int i=0;i<temp.length();i++){
String a=temp.substring(i,i+1);
if(Operator.isicon(a)){
if(string1.equals("")){
System.out.println("empty");
}
else{
number.push(new Double(string1));
}
System.out.println("string1 is:"+string1);
string1="";
if(!icon.empty()){
if(Operator.comparison((String)icon.peek(),a)){
String symbol= (String)icon.pop();
--i;
double value1=((Double)number.pop()).doubleValue();
double value2=((Double)number.pop()).doubleValue();
if(symbol.equals("+")){
number.push(new Double(value1+value2));
System.out.println((Double)number.peek());
}
if(symbol.equals("-")){
number.push(new Double(value2-value1));
System.out.println((Double)number.peek());
}
if(symbol.equals("*")){
number.push(new Double(value1*value2));
System.out.println((Double)number.peek());
}
if(symbol.equals("/")){
number.push(new Double(value2/value1));
System.out.println((Double)number.peek());
} System.out.println("operator is:"+symbol);
System.out.println("value1 as:"+value1);
System.out.println("value2 as:"+value2);
}
else{
icon.push(a);
System.out.println("symbol is:"+a);
}
}
else{
icon.push(a);
System.out.println("icon is:"+a);
}
}
else{
string1=string1+a;
}
}
Double source=(Double)number.pop();
System.out.println("source is :"+source); }
catch(Exception e){
System.out.println(e);
}
}
}class Operator{
static String[] icon={"*","/","+","-","="};
public static boolean comparison(String icon1,String icon2){
int value1=10;
int value2=10;
for(int i=0;i<icon.length;i++){
if(icon1.equals(icon[i])){
value1=i;
break;
}
}
for(int i=0;i<4;i++){
if(icon2.equals(icon[i])){
value2=i;
break;
}
}
return (value1<=value2);
}
public static boolean isicon(String temp){
for (int i=0;i<icon.length;i++){
if(temp.equals(icon[i])){
return true;
}
}
return false;
}
}括号没加,只要把括号的优先级加到ICON数组里就行啦,“(”最高,“)”仅高于“=”。
呵呵,这么多人回答我的问题啊,我该给你多少分?你自己说吧~~~~ :(
感谢各位~~~
等我算算怎么给分的啊,再结帐啊 :)