【问题标题】:Stack implementation java栈实现java
【发布时间】:2020-10-24 23:11:24
【问题描述】:

无法通过此代码实现堆栈...

UseStack.java

     class UseStack{
            public static void main(String[] args) {
                Scanner obj = new Scanner(System.in);
                System.out.println("Enter the size of Stack....");
                int n = obj.nextInt();
                Push push = new Push(n);
                Pop pop = new Pop(n);
                while(true){
                    System.out.println("1: Push");
                    System.out.println("2: pop");
                    System.out.println("3: Show");
                    int choice = obj.nextInt();;
                    switch(choice){
                        case 1:
                        push.push();
                        break;
                        case 2:
                        pop.pop();
                        break;
                        case 3:
                        push.show();    
                        break;
                        default:
                        System.out.println("Invalid Option");
                        break;
                    }
                }
            }
        }

Stack.java

class Stack {
    public int arr[];
    public  int top;
    public  int capacity;

    Stack(int size){
        this.arr = new int[size];
        this.capacity = size;
        this.top = -1;
    }
}

Push.java

class Push extends Stack {
    Push(int size) {
        super(size);
    }

    private static Scanner obj;
    public void push(){
        obj = new Scanner(System.in);
        System.out.println("Enter Value to push...");
        int value = obj.nextInt();
        System.out.println("Value : "+value);
        if(top==capacity-1){
            System.out.println("StackOverflow");
            return;
        }
        else{
            top++;
            System.out.println("Top : "+top);
            arr[top]=value;
            System.out.println("Pushed... "+arr[top]);
        }
    }

    public void show(){
        if(top==-1){
            System.out.println("StackUnderFlow");
            return;
        }
        else{
            System.out.println("Stack Elements : ");
            for(int i=top;i>=0;i--){
                System.out.println(arr[i]+" ");
            }
        }       
    }
}

Pop.java

public class Pop extends Stack {

    Pop(int size) {
        super(size);
    }
    
    public void pop(){
        if(top==-1){
            System.out.println("StackUnderflow-pop");
            return;
        }
        else{
            System.out.println("Top : "+top);
            System.out.println("Poped.. "+arr[top]);
            top--;
        }
    }
    
}

问题

在这个实现中 pop() 不起作用.....

我认为这个 Pop 类需要同时扩展 Stack 和 Push 类,因此这在 java 中是不可能的,如果我错了,谁能帮我解决这个问题...

【问题讨论】:

  • 为什么 push 和 pop(它们是 操作)会扩展 Stack 类?你不会写Dog extends AnimalBark extends Dog吧?
  • @Kayaman 先生,您能否更正我一下
  • 你不用叫我先生。我只是问你为什么有PushPop 课程?为什么push()pop() 方法不存在于Stack 类中?
  • 您需要在问题中包含任何错误。但是代码是设计错误的,所以你应该先修复你的设计(删除PushPop类),然后尝试让你的代码工作。
  • 问题是 push 和 pop 不能在同一个数据结构上工作。当用户发出“推送”命令时,您在push 堆栈上调用push(),数据因此被添加到push 堆栈中;同时“pop”堆栈仍然是空的。现在,当用户发出“弹出”命令时,您调用了pop 堆栈的pop() 方法,并且没有任何内容可以从空的pop 堆栈中弹出。

标签: java stack


【解决方案1】:

pop() 不起作用,因为您使用不同的对象进行推送和弹出。

你不需要为 push 和 pop 定义另一个类,它们是在 Stack 类中添加这些函数的操作。

class Stack {
   ... // members and constructor
   public void push(){..}
   public void pop(){..}
   public void show(){..}
}

并创建一个Stack类的对象,用于push、pop和show

Stack s = new Stack(n);
while(true){
    ... 
    switch(choice){
        case 1:
        s.push();
        break;
        case 2:
        s.pop();
        break;
        case 3:
        s.show();    
        break;
        default:
        System.out.println("Invalid Option");
        break;
    }
}

【讨论】:

  • @ItazakhStern 知道什么?由于您的设计完全错误,您实际上使用了多个对象,但您认为可以将它们视为单个堆栈?我建议你开始阅读tutorial,因为你并不像你想象的那么了解。
  • @ItazakhStern:“我知道这个”?如果你知道,为什么要问这个问题?
  • 我的意思是说像push和pop这样的操作可以在stack类中定义
猜你喜欢
  • 2019-11-11
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 2020-10-24
  • 1970-01-01
相关资源
最近更新 更多