首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从使用数组构建的堆栈中删除元素?

如何从使用数组构建的堆栈中删除元素?
EN

Stack Overflow用户
提问于 2014-10-09 18:42:53
回答 3查看 764关注 0票数 0

我在研究堆栈。当我遇到Java不允许“从null转换为int”时,我正试图为pop()编写代码.

如何从数组中删除元素?即使我将null类型为integer,它也会引发空指针异常。

我在网上看到的大多数其他教程只是更改堆栈的顶部,对索引中的值不做任何处理。

检查下面的int pop()函数

代码语言:javascript
复制
static class Stack{

        int[] holder;
        int capacity;
        int top;

        //Constructor
        Stack(int a){
            holder = new int[a];
            capacity = a-1;
            top = -1;
        }

        //Method to Print Stack
        void PrintStack(){
            System.out.println(Arrays.toString(this.holder));
        }

        //Method to PUSH
        void push(int a){
            //Check for StackOverflow
            if(top == capacity){
                System.out.println("Stack Overflow!!!");
                }
            else{
                top++;
                this.holder[top] = a;
            }
        }

        //Method to POP
        int pop(){
            //Check for StackUnderflow
            if(top == -1){
                System.out.println("Stack Underflow");
            }
            else{
                return this.holder[top];
                this.holder[top] = null;
                top--;
            }
        }
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-09 18:51:58

因为这是一个(原语)整数数组,所以不能将null分配给其中的一个元素。实际上,当创建数组时,它的元素不是null,它们被设置为零,这是整数的缺省初始值。

如果数组是一个对象数组,那么将弹出元素替换为null是很重要的,否则这些对象将不会被垃圾收集。当数组是原语类型时,这个问题就不存在了,所以您可以只保留原来的值。

但是,我建议您更改数组打印方法,因为无论堆栈的当前大小如何,它总是打印整个数组。那会让人困惑。您应该只打印到"top“元素的数组。

票数 1
EN

Stack Overflow用户

发布于 2014-10-09 18:44:49

如果要在整数数组中表示null,请使用java Integer类型,而不是本机int类型。

将旧值保留在堆栈中未使用的位置并不可怕。过去,数字0和空值之间没有区别,因此修改未使用时隙中的值没有好处。

票数 1
EN

Stack Overflow用户

发布于 2014-10-09 18:50:58

我认为以下可能是一种更准确的方式来表达你想要完成的事情。将int转换为Integer并返回null,这是现在允许的,因为它是Integer类型。

代码语言:javascript
复制
public class Stack{

        Integer[] holder;
        int capacity;
        int top;

        //Constructor
        Stack(int a){
            holder = new Integer[a];
            capacity = a-1;
            top = -1;
        }

        //Method to Print Stack
        void PrintStack(){
            System.out.println(Arrays.toString(this.holder));
        }

        //Method to PUSH
        void push(int a){
            //Check for StackOverflow
            if(top == capacity){
                System.out.println("Stack Overflow!!!");
                }
            else{
                top++;
                this.holder[top] = a;
            }
        }

        //Method to POP
        Integer pop(){
            //Check for StackUnderflow
            if(top == -1){
                return null;
            }
            else{
                return this.holder[top--];
            }
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26285770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档