/*
栈先进后出
*/
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);
}
}
栈先进后出
*/
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);
}
}