一个简单的问题

goodmrning 2008-05-31 02:08:21
请帮小弟看看这个小程序:
import java.util.*;
public class Caculate
{
/**
* @param args
*/
double operator1=0,operator2=0,result=0;
Stack<Character> stack;
public Caculate()
{
stack=new Stack<Character>();
}
public double caculate(String inputString )
{
char ch;
for(int i=0;i<inputString.length();i++)
{
ch=inputString.charAt(i);
if(Character.isDigit(ch))
{
stack.push(ch);
}
else if(ch==' ') break;
else //ch为操作符
{
if(stack.isEmpty())
{
System.out.println("栈空!");
}
else operator1=(double)stack.pop();
if(stack.isEmpty())
{
System.out.println("栈空!");
}
else operator2=(double)stack.pop();
result=getresult(operator1,operator2,ch);
stack.push((char)result);
}
}
return (double)stack.pop();//这里提示错误:at java.util.Stack.pop(Unknown Source)
}
public double getresult(double x,double y,char ch1)
{
switch (ch1)
{
case '+':
result=x+y;
break;
case '-':
result=y-x;
break;
case '*':
result=x*y;
break;
case '/':
result=y/x;
break;
default:
result=0;
break;
}
return result;
}
public static void main(String[] args)
{
Caculate ca =new Caculate();
Trans tr=new Trans();
double jieguo=0;
try
{
String pexpression="3 5 + 6 * 2 4 * -";
System.out.println("波兰表达式: "+pexpression);
jieguo=ca.caculate(poleanexpression);
System.out.println("(3+5)*6-2*4="+jieguo);
}
catch (Exception e)
{
e.printStackTrace();
}
}

}
...全文
128 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodmrning 2008-05-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jiangnaisong 的回复:]
答:楼主5楼贴的代码在JDK1.5下跑,没有任何问题啊。
[/Quote]
不会吧,我的JKD可是1.6的了啊,报错啊.
云上飞翔 2008-05-31
  • 打赏
  • 举报
回复
答:楼主5楼贴的代码在JDK1.5下跑,没有任何问题啊。
KKK2007 2008-05-31
  • 打赏
  • 举报
回复
你这是个翻译表达式的程序
goodmrning 2008-05-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jiangnaisong 的回复:]
答:除了以下两句的错误之外:
Trans tr=new Trans();//错误原因:Trans没有定义
jieguo=ca.caculate(poleanexpression);//错误原因:poleanexpression没有定义


其它都对。
若将:
Trans tr=new Trans();这一句去掉
jieguo=ca.caculate(poleanexpression);改为:
jieguo=ca.caculate(pexpression);

运行结果就正常了。
[/Quote]




不好意思,我没有把Trans类没有贴出来,应该把Trans tr=new Trans();这一句去掉.但调试时提示return (double)stack.pop();这句出错.我弄了很久,就是没搞定.这个程序要实现的功能很简单,就是根据输入的波兰表达式计算结果.请高手帮帮小弟!
import java.util.*;
public class Caculate
{
/**
* @param args
*/
double operator1=0,operator2=0,result=0;
Stack<Character> stack;
public Caculate()
{
stack=new Stack<Character>();
}
public double caculate(String inputString )
{
char ch;
for(int i=0;i<inputString.length();i++)
{
ch=inputString.charAt(i);
if(Character.isDigit(ch))
{
stack.push(ch);
}
else if(ch==' ') break;
else //ch为操作符
{
if(stack.isEmpty())
{
System.out.println("栈空!");
}
else operator1=(double)stack.pop();
if(stack.isEmpty())
{
System.out.println("栈空!");
}
else operator2=(double)stack.pop();
result=getresult(operator1,operator2,ch);
stack.push((char)result);
}
}
return (double)stack.pop();//这里提示错误:at java.util.Stack.pop(Unknown Source)
}
public double getresult(double x,double y,char ch1)
{
switch (ch1)
{
case '+':
result=x+y;
break;
case '-':
result=y-x;
break;
case '*':
result=x*y;
break;
case '/':
result=y/x;
break;
default:
result=0;
break;
}
return result;
}
public static void main(String[] args)
{
Caculate ca =new Caculate();
// Trans tr=new Trans();
double jieguo=0;
try
{
String pexpression="3 5 + 6 * 2 4 * -";
System.out.println("波兰表达式: "+pexpression);
jieguo=ca.caculate(pexpression);
System.out.println("(3+5)*6-2*4="+jieguo);
}
catch (Exception e)
{
e.printStackTrace();
}
}

}
jdlsfl 2008-05-31
  • 打赏
  • 举报
回复
楼上正解
楼主好奇怪
云上飞翔 2008-05-31
  • 打赏
  • 举报
回复
答:除了以下两句的错误之外:
Trans tr=new Trans();//错误原因:Trans没有定义
jieguo=ca.caculate(poleanexpression);//错误原因:poleanexpression没有定义


其它都对。
若将:
Trans tr=new Trans();这一句去掉
jieguo=ca.caculate(poleanexpression);改为:
jieguo=ca.caculate(pexpression);

运行结果就正常了。

Shine_Panda 2008-05-31
  • 打赏
  • 举报
回复
没有看出你是那里的问题啊
胡矣 2008-05-31
  • 打赏
  • 举报
回复
怎么了?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧