java小白_李同学 2021-05-10 12:19 采纳率: 75%
浏览 39
已采纳

给数组扩容失败求解答

每次输出数组的长度都是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();//弹栈--弹栈失败*/







    }

}



    }

}

  • 写回答

4条回答 默认 最新

  • CSDN专家-三岁丫 2021-05-10 13:22
    关注

    Java 是值传递的,不是引用传递(类似 C 语言中的指针)。传递进来的是一个 "新"的数组了,不会影响到主调函数中的数组。所以你只能改成 myStock = objects1;。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟