@@@@@@非常有趣但是很有难度的问题,高手或菜鸟都进来看看吧,提供思路就有分!!! 以前好象学过,好象就是先写成后缀表达式,然后压栈,出栈。FILO,先进后出。栈么就是个数据结构,呵呵。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 好好看看java版的数据结构,或者c语言严尉敏编的数据结构,你的问题与语言没有什么关系 简单地说一下把。(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 这不是"-"也进栈了么?我真的不大懂啊?自己看书不大理解,有个例子就好了。 唉和我一样惨啊本来很简单的问题大伙非是吧它搞得复杂化了不过这样也好让我模模糊糊的数据结构有了一定加深我想你应该先看看基础数据结构如什么是入栈,出栈运算符的优先级在thinking in java里介绍的比较详细的。 sunzq13(陡金山) 说的好你还要为 +、-、*、/、(、)做一个优先级矩阵,运算的先后顺序靠这个矩阵来指引比如 + - * / ( ) + 1 1 0 0 0 -1 - 1 1 0 0 0 -1 * 1 1 1 1 0 -1 /( )……竖排表示第一个运算符,横排表示紧接的运算符1 表示先竖后横,0表示先横后竖,-1表示出错其他的自己定义吧,我以前分析过这个,但是程序早就没了自己试试吧结合堆栈操作 晕学了数据结构好像很猖狂我没学过数据结构 一样能解决问题动态生成java类-->编译-->实例化-->运行 ok 帮你up一下吧我也只是记得书上有,用栈实现的但是……我也写不出来:P import java.util.Stack;public class Arithmetic{ 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数组里就行啦,“(”最高,“)”仅高于“=”。 to:QQyb2000呵呵,这么多人回答我的问题啊,我该给你多少分?你自己说吧~~~~ :( 感谢各位~~~等我算算怎么给分的啊,再结帐啊 :) c#md5加密算法改成java的 内部文件共享盘 两道简单的程序题目,求高手看看 连接sqlserver 出错 算法:如何遍历26个字母中任意4个或5个字母的组合? 寻求 Cad 操作帮助 关于access的日期/时间类型的插入问题 execl 问题!很简单,大家看看。在线.......... 方法的数组参数传递 《Design Patterns》这本书怎么样?怎么在具体的应用中使用Design Patterns?欢迎讨论! 下例中抽象类里的抽象方法怎么能直接调用? 关于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数组里就行啦,“(”最高,“)”仅高于“=”。
呵呵,这么多人回答我的问题啊,我该给你多少分?你自己说吧~~~~ :(
感谢各位~~~
等我算算怎么给分的啊,再结帐啊 :)