java堆栈获取后缀表达式(一)

2014-11-24 10:46:15 · 作者: · 浏览: 3

类中存在好多System.out,是调试作用的,可能看起来会很多余,自己可以删掉,代码看起来就干净多了。java中本身也有内置好了的堆栈,也可以看下

[java]
package com.example.hanhan;

import java.util.ArrayList; www.2cto.com

public class Stack {
String[] code=new String[100]; //数组用来实现栈
int top=0; //栈顶的表示下表
String result=""; //结果后缀表达式
/**
* @param editText 获取到文本框的text后条用下面的
* getArray方法获取到数字和操作符的数组进行循环遍历操作
*/
public String getHuZhui(String editText)
{
System.out.println("进入方法");
if(editText!=""&&editText.length()>0)
{
System.out.println(editText);
//将string转为数组
ArrayList str=getArray(editText);
System.out.println("进入操作");
System.out.println("调用的大小:"+str.size());
//传来的字符串长度不为零才有效,遍历所有的操作符,放入堆栈中
for(int i=0;i {
System.out.println("操作符号:"+str.get(i));
System.out.println("进入循环");
if(str.get(i).equals("(")) //碰到左括号就入栈
{
code[++top]="(";
System.out.println("栈值:"+code[top]);
System.out.println("左括号");
}
else if(str.get(i).equals("*")) //碰到乘号,如果栈顶是除号则推出除号
{
while("/".equals(code[top]))
{
result+=code[top]+","; //操作符出栈
top--;
}
code[++top]="*"; //乘号入栈
System.out.println("栈值:"+code[top]);

System.out.println("乘号");
}
else if(str.get(i).equals("/")) //碰到乘号,如果栈顶是除号就出栈
{
while("*".equals(code[top]))
{
result+=code[top]+","; //操作符出栈
top--;
}
code[++top]="/"; //除号入栈
System.out.println("栈值:"+code[top]);
System.out.println("除号");
}
else if(str.get(i).equals("+"))
{
while(("*".equals(code[top]))||("/").equals(code[top])||("-").equals(code[top]))
{
result+=code[top]+","; //操作符出栈
top--;
}
code[++top]="+"; //加号入栈
System.out.println("栈值:"+code[top]);
System.out.println("加号处理后:"+result);
}
else if(str.get(i).equals("-"))
{
while(("*".equals(code[top]))||("/").equals(code[top])||("+").equals(code[top]))
{
result+=code[top]+","; //操作符出栈
top--;
}
code[++top]="-"; //减号入栈
System.out.println("栈值:"+code[top]);
System.out.println("减号打印结果:"+result);
}
else if(str.get(i).equals(")"))
{
System.out.println(top);
System.out.println("---------");
System.out.println(code[top]);
System.out.println("---------");
//碰到右括号时就出栈直到退到左括号
while(!"(".equals(code