那也一样啊
StringBuffer s = new StringBuffer();s.add("第一次的输出");
...
s.add("第二次的输出");
...
s.add("最后一次的输出");
不就行了

解决方案 »

  1.   

    那你看一下这个程序,如何按照你说的来实现
    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(Exception e){
              System.out.println(e);}
              System.out.println("the postorder expression is");
             
       
             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);
                             }
                             operator.push(inorder.charAt(inposition));
                          }
                        }//一段
                    }
                   else
                    System.out.print(inorder.charAt(inposition));
                    int[] number=new int[20];
                    number[inposition]=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;
             }
            }
      

  2.   

    这就是你程序结构的问题了,你把显示逻辑和数据捆绑得太死了
    最简单省事的解决办法就是定义一个变量(StringBuffer或Stack都行),每次System.out.println()时都把输出记录到这个变量中,为外部提供一个取这个私有变量值的方法
      

  3.   

    呵呵,Sorry,我一向很马虎的
    马上改正:)
      

  4.   

    最简单的还是那样解决
    加一个
    private StringBuffer _result = new StringBuffer();
    将每一个out都修改,如
    System.out.print( yourString );
    改为
    System.out.print( yourString );
    _result.add( yourString ); 
    提供一个getResult()方法
    public String getResult()
    {
        return _result.toString();
    }把你的main中的语句提到一个方法execute()中;
    public void execute()
    {
    }
    在main中的调用改为
        execute();
        String result = getResult();先进一点的方法你可以参看《设计模式》中的Interpreter
      

  5.   

    public class Stack1
    {
        //~ Instance/static variables .............................................    private StringBuffer _result = new StringBuffer();    //~ Methods ...............................................................    public String getResult()
        {
            return this._result.toString();
        }    public static void main( String[] args )
        {
            execute();
        }    public void execute()
        {
            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 ( Exception e )
            {
                System.out.println( e );
            }        System.out.println( "the postorder expression is" );        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 );
                                append( 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 );
                                    append( operator1 );
                                }
                            }                        operator.push( inorder.charAt( inposition ) );
                        }
                    } //一段
                }
                else
                {
                    System.out.print( inorder.charAt( inposition ) );
                    append( inorder.charAt( inposition ) );
                }            int[] number = new int[ 20 ];
                number[ inposition ] = inorder.charAt( inposition );
                inposition++;            if ( inposition >= inorder.length() )
                {
                    break;
                }
            }        while ( operator.top != -1 )
            {
                operator1 = operator.pop();
                System.out.print( ( char ) operator1 );
                append( operator1 );
            }
        }    private void append( char ch )
        {
            _result.append( ch );
        }
    }
    class StackArray
    {
        //~ Instance/static variables .............................................    int maxsize = 20;
        int top = -1;
        int[] astack = new int[ maxsize ];    //~ Methods ...............................................................    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 pop()
        {
            int temp;
            int i;        if ( top < 0 )
            {
                System.out.println( "the stack is empty" );            return -1;
            }        temp = astack[ top ];
            top--;        return temp;
        }    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;
            }
        }    public void push( int value )
        {
            int i;        if ( top >= maxsize )
            {
                System.out.println( "the stack is full" );
            }
            else
            {
                top++;
                astack[ top ] = value;
            }
        }
    }