用数组模拟栈数据结构--异常处理情况

/*
栈先进后出
*/


public class fuck8{

public static void main(String[] args){

//创建对象来访问成员方法
Stack s=new Stack();

//创建对象对其赋值
user u1=new user("jack",12);
user u2=new user("hah",14);
user u3=new user("haha",13);
user u4=new user("hahi",17);

try{
//压栈
s.push(u1);
s.push(u2);
s.push(u3);
s.push(u4);

}catch(StackOperationException e){
e.printStackTrace();
}


try{
//弹栈
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());

}catch(StackOperationException e){
e.printStackTrace();
}



}


}


class Stack{

//使用数组存储数据,Object类型的数组可以存储任何数据
Object[] elements;

//指向栈顶元素上方的一个帧
int index;

//constructor,默认初始化容量是5
//这两个构造函数的作用是什么?只是初始化数组的容量吗?
Stack(){
this(3);//调用另一个构造方法
}

Stack(int max){
elements =new Object[max];//允许修改这个数组的长度
}

//对外提供一个压栈的方法
//Object element是规定只能弹进这种类型的元素
//到时候传递的参数就变成element压进了数组里面

public void push(Object element) throws StackOperationException{ 

//按顺序装进去后,index值就是数组的长度
//弹栈的时候再从下标大的开始慢慢自减弹出


if(index==elements.length){
throw new StackOperationException("栈已满");}

elements[index++]=element;
}
 
//对外提供一个弹栈的方法
public Object pop() throws StackOperationException{

//从大的下标自减弹出
if(index==0){
throw new StackOperationException("栈已空");
}
return elements[--index];
}
}




class user{

String name;
int age;

//调用构造方法是为了好让外界赋值
user(String name,int age){
this.name=name;
this.age=age;
}

public String toString(){

return "user[name="+name+" age="+age+"]";

}
}


//我的方法是用两层for循环,先按顺序存储
//两层循环都用一个循环变量,第二层的循环变量再自减
//学到的东西:多创建类,多创建方法,以便于其他人使用调用


//如果栈已经满了,还有数据再继续压栈的话就会出现异常stackexception
//异常的类有固定格式.很好写,要记的


class StackOperationException extends Exception{

public StackOperationException(){}
public StackOperationException(String msg){
super(msg);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值