那也一样啊
StringBuffer s = new StringBuffer();s.add("第一次的输出");
...
s.add("第二次的输出");
...
s.add("最后一次的输出");
不就行了
StringBuffer s = new StringBuffer();s.add("第一次的输出");
...
s.add("第二次的输出");
...
s.add("最后一次的输出");
不就行了
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;
}
}
最简单省事的解决办法就是定义一个变量(StringBuffer或Stack都行),每次System.out.println()时都把输出记录到这个变量中,为外部提供一个取这个私有变量值的方法
马上改正:)
加一个
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
{
//~ 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;
}
}
}