每次输出数组的长度都是5,并且模拟压栈的时候到5就提示满了,为什么扩容不成功呢,来大佬看看,
/**
* @author liqiming
* @date 2021-5-9 -16:04
*
*
*
*
* 模拟栈的压栈和弹栈
*/
public class MyStock {
public MyStock(int c){
myStock=new Object[c];
}
public MyStock(){}
int n=-1;//用n作为栈的指向元素,压栈和出栈都用数组表示,这里
//陈述的是一个栈可以存储所有的引用类型的数据,我们定义为Object元素
Object [] myStock;
static{
}
//压栈方法;
public void push(Object object){
if(n>=myStock.length-1){
System.out.println("栈满了,压个鸡鸡,赶紧加空间吧");
return;
}
else{
System.out.println("压栈成功");
n++;
myStock[n]=object;
}
}
//弹栈方法
public void pop(){
if(n==-1){
System.out.println("栈已经空,请压栈继续");
return;
}
System.out.println("接下来开始弹栈");
System.out.println(myStock[n]);
n--;
}
//提供一个方法输出这个栈的长度
public void printArrayLength(){
System.out.println("栈的长度是: "+myStock.length);
}
//提供一个给栈扩容的方法
public void arrayExtend(Object[] obj){
Object [] objects1 =new Object[obj.length+10];
System.arraycopy(obj,0,objects1,0,obj.length);
obj=objects1;
System.out.println("传入参数的地址"+objects1);
System.out.println("改变之后的地址"+obj);
System.out.println("新栈的长度是:"+obj.length);
}
}
class Test3{
public static void main(String[] args){
//这里模拟压栈
MyStock stock1 =new MyStock(5);//这里的构造方法给栈赋予初始长度就是5
System.out.println("输出原始数组的地址"+stock1.myStock);
stock1.arrayExtend(stock1.myStock);
/* stock1.push(new Test3());//CTRL+d 向下复制,持续压栈
stock1.push(new Test3());//CTRL+d 向下复制,持续压栈
stock1.push(new Test3());//CTRL+d 向下复制,持续压栈
stock1.push(new Test3());//CTRL+d 向下复制,持续压栈
stock1.push(new Test3());//CTRL+d 向下复制,持续压栈
stock1.push(new Test3());//CTRL+d 向下复制,持续压栈 这里会提示栈满了
//接下来给栈扩容
stock1.arrayExtend(stock1.myStock);
stock1.printArrayLength();//输出数组的长度
stock1.pop();//弹栈
stock1.pop();//弹栈
stock1.pop();//弹栈
stock1.pop();//弹栈
stock1.pop();//弹栈
stock1.pop();//弹栈--弹栈失败
stock1.pop();//弹栈--弹栈失败*/
}
}
}
}