CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

各位大虾!!请帮忙啊!救小弟一把!我编的一个中缀转后缀的程序,便已通过可是运行却出错,请指教!!

楼主iceman09()2002-05-03 12:04:59 在 Java / J2SE / 基础类 提问

运行错误是:              
  please   input   the   inorder   expression  
  1+2  
  the   postorder   expression   is  
  Exception   in   thread   "main"   java.lang.StringIndexOutOfBoundsException:   String  
  index   out   of   range:   -1  
                  at   java.lang.String.charAt(String.java:507)  
                  at   stack1.main(stack1.java:18)  
  源码如下:  
  import   java.io.*;  
  public   class   stack1{  
                    public   static   void   main(String   args[]){    
                    stackarray   operator=new   stackarray();  
                    String   inorder=new   String();  
                    int   inposition=0;  
                    int   operator1=0;  
                    System.out.println("please   input   the   inorder   expression");  
                    BufferedReader   input=new   BufferedReader(new   InputStreamReader(System.in));  
                    try{  
                    inorder=input.readLine();}  
                    catch(IOException   e){  
                    System.out.println(e);}  
                    System.out.println("the   postorder   expression   is");  
                     
                    for(inposition=-1;;inposition++){  
                    while   (true){  
                    if(operator.isoperator(inorder.charAt(inposition))){  
                    if((operator.top==-1)||(char)inorder.charAt(inposition)=='(')  
                                          operator.push(inorder.charAt(inposition));  
                                    else  
                    {       if((char)inorder.charAt(inposition)==')')  
                                {if(operator.astack[operator.top]!=40)  
                                      {operator1=operator.pop();  
                                              System.out.print((char)operator1);  
                    }  
                    }  
                    else  
                    {if(operator.priority(inorder.charAt(inposition))  
                    <=operator.priority(operator.astack[operator.top])  
                                                  &&   operator.top!=-1)  
                                                  {  
                                                  operator1=operator.pop();  
                                                  if(operator1!=40)  
                                                  System.out.print((char)operator1);  
                                                  }else  
                                                  operator.push(inorder.charAt(inposition));  
                                            }  
                                        }  
                                }  
                                 
                                System.out.print(inorder.charAt(inposition));  
                                inposition++;  
                                if(inposition>=inorder.length())  
                                break;  
                                 
                        }  
                      while(operator.top!=-1)  
                        {  
                        operator1=operator.pop();  
                        System.out.print((char)operator1);  
                        }  
                  }  
                  }  
          }  
                  class   stackarray{  
                  int   maxsize=20;  
                  int[]   astack=new   int[maxsize];  
                  int   top=-1;  
                  public   void   push(int   value){  
                  int   i;  
                  if(top>=maxsize)  
                  System.out.println("the   stack   is   full");  
                  else{  
                  top++;  
                  astack[top]=value;  
                  }  
                  }  
                  public   int   pop(){  
                  int   temp;  
                  int   i;  
                  if(top<0){  
                  System.out.println("the   stack   is   empty");  
                  return   -1;  
                  }  
                  temp=astack[top];  
                  top--;  
                  return   temp;  
                  }  
                  public   boolean   isoperator(int   operator){  
                  if(operator==43||operator==45  
                  ||operator==42||operator==47  
                  ||operator==40||operator==41)  
                  return   true;  
                  else  
                  return   false;  
                  }  
                  public   int   priority(int   operator){  
                  if(operator==43||operator==45||operator==40)  
                  return   1;  
                  else   if(operator==42||operator==47)  
                  return   2;  
                  else  
                  return   0;  
                  }  
                  }  
                                     
   
                     
                     
                     
  问题点数:50、回复次数:1Top

1 楼dylanwolf()回复于 2002-05-03 12:23:56 得分 50

for(inposition=-1;;inposition++){  
                    while   (true){  
                    if(operator.isoperator(inorder.charAt(inposition))){  
   
  这里出错,   inorder.charAt(-1)??,   不可以啊!Top

相关问题

  • 运行出错
  • 运行出错
  • 运行出错
  • 运行出错!
  • 运行出错
  • 怎样把后缀表达式变成中缀表达式??
  • dll运行出错
  • memfile运行出错
  • 运行时出错!!!
  • 运行时出错??

关键词

  • top
  • inposition
  • inorder
  • stackarray
  • charat
  • maxsize
  • operator
  • stack
  • expression
  • println

得分解答快速导航

  • 帖主:iceman09
  • dylanwolf

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo