目录
1、堆栈的对象封装
封装中包括object对象的数组,初始化容量(使用无参构造方法)为3。并且包括一系列set,get方法。最后封装一个push(压栈)方法和pop(弹栈)方法,若栈为空,使用Java异常类抛出错误。
package com.xinxiang.javase.mystack;
/*
编写程序:使用一维数组,模拟栈数据结构
要求:
1、这个栈可以存储Java中的任何引用类型的数据
2、在栈中提供push方法模拟压栈。(栈满了要有提示信息)
3、在栈中提供pop方法模拟弹栈。(栈空了,也要有提示信息)
4、编写测试程序,new栈对象,调用push,pop方法来模拟压栈弹栈的动作。
*/
public class SimulateStack {
private Object[] stack;
private int stackTop;
public SimulateStack() {
this.stack=new Object[3];
this.stackTop=-1;
}
public SimulateStack(Object[] stack) {
this.stack = stack;
}
public Object[] getStack() {
return stack;
}
public void setStack(Object[] stack) {
this.stack = stack;
}
public void push(Object Elements) throws MyStackException {
if(this.stackTop>=this.stack.length-1){
throw new MyStackException("栈已满!!!,PUSH失败!!");
}
this.stack[++this.stackTop]=Elements;
System.out.println("压栈"+Elements+"成功,栈顶指向"+this.stackTop);
}
/**
* 创建异常对象,向上抛出异常来输出异常
* @throws MyStackException
*/
public void pop() throws MyStackException {
if(this.stackTop <0) {
throw new MyStackException("栈已空!!!");
}
System.out.println("当前栈顶指向"+(this.stackTop -1)+",元素"+this.stack[this.stackTop]+"已被弹出");
this.stack[this.stackTop]=null;
this.stackTop--;
}
}
2、异常对象
package com.xinxiang.javase.mystack;
public class MyStackException extends Exception {
public MyStackException() {
}
public MyStackException(String message) {
super(message);
}
}
3、模拟实现
package com.xinxiang.javase.mystack;
public class test {
public static void main(String[] args) {
SimulateStack SS=new SimulateStack();
try {
SS.push(new Object());
SS.push("ksk");
SS.push("k");
} catch (MyStackException e) {
// e.printStackTrace();
System.out.println(e.getMessage());
}
try {
SS.pop();
SS.pop();
SS.pop();
SS.pop();
} catch (MyStackException e) {
e.printStackTrace();
//System.out.println(e.getMessage());
//System.out.println(e);
}
}
}
4、打印台输出
压栈java.lang.Object@70177ecd成功,栈顶指向0
压栈ksk成功,栈顶指向1
压栈k成功,栈顶指向2
当前栈顶指向1,元素k已被弹出
当前栈顶指向0,元素ksk已被弹出
当前栈顶指向-1,元素java.lang.Object@70177ecd已被弹出
com.xinxiang.javase.mystack.MyStackException: 栈已空!!!
at com.xinxiang.javase.mystack.SimulateStack.pop(SimulateStack.java:44)
at com.xinxiang.javase.mystack.test.main(test.java:19)