请帮小弟看看这个小程序:
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();
}
}}
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();
}
}}
解决方案 »
- 用JEditorPane控件,来显示本地的html文件
- java程序打包成bat
- 主题:用log4j实现servlet 每个收发请求保存为单独的日志文件。
- 怎么用Java下载中文网页?请给出代码。小弟将十分感谢!!!
- 输入问题?
- 在java中,怎么用socket传输图象呀??
- 迷茫~~~没什么进步,介绍和学习学习经验请进——this.append(散分)
- 谁能提供一个好点的SQL Server 7的JDBC驱动?谢谢啦~!
- Java如何实现非矩形边框?(awt和swing的高手请进)
- java学了一年,基础大下了,但不知接下来要学什么,请大家帮个忙吧??这里多谢了
- 动态链接的问题
- 这道简单的题是什么逻辑...
Trans tr=new Trans();//错误原因:Trans没有定义
jieguo=ca.caculate(poleanexpression);//错误原因:poleanexpression没有定义
其它都对。
若将:
Trans tr=new Trans();这一句去掉
jieguo=ca.caculate(poleanexpression);改为:
jieguo=ca.caculate(pexpression);运行结果就正常了。
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();
}
}}