大家帮我看看这个程序为什么会出现运行结果与预期不符的原因吧! 又多括号处理了啊还是贴代码把估计是pop循环那里出问题了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 源代码如下import java.io.*;public class InorderToPostorder{ public static void main(String args[]){ int Position=0; String InorderExpression=""; int Operator=0; char Temp='0'; BufferedReader BR= new BufferedReader(new InputStreamReader(System.in) ); StackArray OperatorStack=new StackArray(); System.out.println("Please Input the InorderExpression!"); try{ InorderExpression=BR.readLine(); }catch(IOException e){ } System.out.print("The PostExpression is ["); while(Position<InorderExpression.length()){ Temp=InorderExpression.charAt(Position); if(OperatorStack.isOperator((int)Temp)){ if(OperatorStack.Top==-1||Temp=='('){ OperatorStack.push((int)Temp); }else{ if(Temp==')'){ while( (char)(Operator=OperatorStack.pop())!='(' ){ System.out.print((char)Operator); } }else{ if(OperatorStack.setPriority((int)Temp)<=OperatorStack.setPriority(OperatorStack.peek())){ Operator=OperatorStack.pop(); if((char)Operator!='('){ System.out.print((char)Operator); } OperatorStack.push((int)Temp); }else{ System.out.print(Temp); } } } }else{ System.out.print(Temp); } Position++; } while(OperatorStack.Top!=-1){ Operator=OperatorStack.pop(); System.out.print((char)Operator); } System.out.println("]"); }}class StackArray{ int MaxSize=20; int AStack[]=new int[20]; int Top=-1; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void push(int Value){ if(Top==MaxSize-1) System.out.println("The Stack is full!"); else{ Top++; AStack[Top]=Value; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public int pop(){ int Temp=0; if(Top==-1){ System.out.println("The Stack is empty!"); return -1; } else{ Temp=AStack[Top]; Top--; return Temp; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public boolean isOperator(int Operator){ switch(Operator){ case 43: case 45: case 42: case 47: case 40: case 41: return true; default: return false; } }//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public int setPriority(int Operator){ switch(Operator){ case 40: case 43: case 45: return 1; case 42: case 47: return 2; default: return 0; } }//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public int twoResult(int Operator,int Operand1,int Operand2){ switch(Operator){ case 43 : return (Operand1+Operand2); case 45 : return (Operand1-Operand2); case 42 : return (Operand1*Operand2); case 47 : return (Operand1/Operand2); default : return -1; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public int peek(){ if(Top==-1){ System.out.println("The Stack is Empty!"); return -1; } else{ return AStack[Top]; } } } while( (char)(Operator=OperatorStack.pop())!='(' ){改成while((Operator=OperatorStack.pop())!=40){ 对不起看错了应该改这里if(OperatorStack.setPriority((int)Temp)<=OperatorStack.setPriority(OperatorStack.peek())){<=改为<if(OperatorStack.setPriority((int)Temp)<OperatorStack.setPriority(OperatorStack.peek())){ 就感觉<=改成<会有问题这样还是改回<=然后while( (char)(Operator=OperatorStack.pop())!='(' ){改成while( (char)(Operator=OperatorStack.pop())!='(' && OperatorStack.Top!=-1){强制停止循环虽然别扭,但结果好像是对的,你再验证看看 初学者实现为JTabbedPane添加关闭按钮 java时间格式问题 JAVA背景音乐 能否实现自定义的回调函数 ?? !!!如何通过相对路径读取属性文件??? 用Canvas画了一张图片后,想在上面添加控件,可是显示不出来怎么办? 在JTable中每列文字如何居中 连接Oracle数据库失败!请教高手指点。 因为我有一个jsp页面处理的数据比较大,所以时间较长,我想做一个等待页面,完成后提示,请教如何做? Socket的问题 一个赚钱的好机会 我弄了一天,JDK还是不行,求救
public static void main(String args[]){
int Position=0;
String InorderExpression="";
int Operator=0;
char Temp='0';
BufferedReader BR= new BufferedReader(new InputStreamReader(System.in) );
StackArray OperatorStack=new StackArray();
System.out.println("Please Input the InorderExpression!");
try{
InorderExpression=BR.readLine();
}catch(IOException e){
}
System.out.print("The PostExpression is [");
while(Position<InorderExpression.length()){
Temp=InorderExpression.charAt(Position);
if(OperatorStack.isOperator((int)Temp)){
if(OperatorStack.Top==-1||Temp=='('){
OperatorStack.push((int)Temp); }else{
if(Temp==')'){
while( (char)(Operator=OperatorStack.pop())!='(' ){
System.out.print((char)Operator);
}
}else{
if(OperatorStack.setPriority((int)Temp)<=OperatorStack.setPriority(OperatorStack.peek())){
Operator=OperatorStack.pop();
if((char)Operator!='('){
System.out.print((char)Operator);
}
OperatorStack.push((int)Temp);
}else{
System.out.print(Temp);
}
}
}
}else{
System.out.print(Temp);
}
Position++;
}
while(OperatorStack.Top!=-1){
Operator=OperatorStack.pop();
System.out.print((char)Operator);
}
System.out.println("]");
}
}class StackArray{
int MaxSize=20;
int AStack[]=new int[20];
int Top=-1;
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public void push(int Value){
if(Top==MaxSize-1)
System.out.println("The Stack is full!");
else{
Top++;
AStack[Top]=Value;
}
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public int pop(){
int Temp=0;
if(Top==-1){
System.out.println("The Stack is empty!");
return -1;
}
else{
Temp=AStack[Top];
Top--;
return Temp;
}
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public boolean isOperator(int Operator){
switch(Operator){
case 43:
case 45:
case 42:
case 47:
case 40:
case 41:
return true;
default:
return false;
}
}
//////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////// public int setPriority(int Operator){
switch(Operator){
case 40:
case 43:
case 45:
return 1;
case 42:
case 47:
return 2;
default:
return 0;
}
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public int twoResult(int Operator,int Operand1,int Operand2){
switch(Operator){
case 43 :
return (Operand1+Operand2);
case 45 :
return (Operand1-Operand2);
case 42 :
return (Operand1*Operand2);
case 47 :
return (Operand1/Operand2);
default :
return -1;
}
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public int peek(){
if(Top==-1){
System.out.println("The Stack is Empty!");
return -1;
}
else{
return AStack[Top];
}
}
}
while((Operator=OperatorStack.pop())!=40){
应该改这里
if(OperatorStack.setPriority((int)Temp)<=OperatorStack.setPriority(OperatorStack.peek())){<=改为<
if(OperatorStack.setPriority((int)Temp)<OperatorStack.setPriority(OperatorStack.peek())){
这样还是改回<=然后while( (char)(Operator=OperatorStack.pop())!='(' ){
改成
while( (char)(Operator=OperatorStack.pop())!='(' && OperatorStack.Top!=-1){
强制停止循环虽然别扭,但结果好像是对的,你再验证看看