请帮小弟看看这个小程序:
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();
   }
}}

解决方案 »

  1.   

    答:除了以下两句的错误之外:
     Trans tr=new Trans();//错误原因:Trans没有定义
    jieguo=ca.caculate(poleanexpression);//错误原因:poleanexpression没有定义
    其它都对。
    若将:
    Trans tr=new Trans();这一句去掉
    jieguo=ca.caculate(poleanexpression);改为:
    jieguo=ca.caculate(pexpression);运行结果就正常了。
      

  2.   

    不好意思,我没有把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();
               }        
        }}
      

  3.   

    答:楼主5楼贴的代码在JDK1.5下跑,没有任何问题啊。
      

  4.   

    不会吧,我的JKD可是1.6的了啊,报错啊.