-1

Java でスタックを動的に実装していますが、この質問に行き着きました。問題は、私のコードが機能し、その理由がわかりません。だからここに私が理解していないコードの私の部分があります:

  Node<E> newNode = new Node(elem,top);
  newNode=top;
  size++;

したがって、私の newNode の 2 番目の引数は、この場合は一番上にあるオブジェクトです。それから私は私の newNode=top; と言います。したがって、私の論理では、newNode は newNode の隣にあり、その newNode = top; の後の命令で言ったからです。ここで何が欠けていますか?私はそれがばかげた質問であることを知っています:(事は、それが機能し、私はいくつかの同様の実装を見てきましたが、なぜそれが機能するのか理解できません。

編集:私のコード全体を投稿してください:

クラスノード:

public class Node<E> {
    private E element;
    private Node<E> next;

    public Node(E element, Node<E> next) {
        this.element = element;
        this.next = next;
    }

    public E getElement() {
        return element;
    }

    public void setElement(E element) {
        this.element = element;
    }

    public Node<E> getNext() {
        return next;
    }

    public void setNext(Node<E> next) {
        this.next = next;
    }

}

//ここで終了

インターフェイス スタック:

public interface Stack<E>  {

    //numero de elementos presentes na pilha 
    public int size( ); 
    //nao contem elementos?
    public boolean isEmpty( ); 
    //devolve proximo objecto a sair, sem remover
    public E peek( )    
        throws EmptyStackException; 

    //empilha novo elemento
    public void push(E o)   
        throws FullStackException;
    //desempilha proximo elemento                                                                                     
    public E pop()          
        throws EmptyStackException;     
}

//インターフェースはここで終了

クラス StackDynamic

public class StackDynamic<E> implements Stack<E>{


    private int size;
    private Node<E> top;
    private int maxCapacity;


    public StackDynamic(int capacity)
    {
      this.maxCapacity=capacity;
      this.size=0;
      this.top=null;
    }

    public StackDynamic()
    {
      this(-1);

    }

    @Override
    public int size() {
        return this.size;
}

    @Override
    public boolean isEmpty() {
       return (this.size == 0);

    }

    @Override
    public E peek() throws EmptyStackException {
        if (isEmpty()) {
            throw new EmptyStackException("A pilha está vazia.");
        }
        return top.getElement();

    }

    @Override
    public void push(E elem) throws FullStackException {
    if(size==maxCapacity){
        throw new FullStackException("Está cheio");
    }
    **Node<E> newNode = new Node<>(elem, top);


    top=newNode;
    size++;**  //error here
    }

    @Override
    public E pop() throws EmptyStackException {
        if (isEmpty()) {
            throw new EmptyStackException("A pilha está vazia.");
        }

         E elemRemoved = top.getElement();
         top = top.getNext();
         size--;
         return elemRemoved;




    }

//クラスはここで終了

今 newNode=top; コマンドは私にはあまり意味がありません:S

4

1 に答える 1

0

ほとんどの場合、それは「機能する」ためです

  • コードはあなたが言うものではありません(私の最初ですが、私はそれを却下しました)
  • 他の場所のコードはバグを隠します
  • コードを適切にテストしていません。

行を削除してnewNode=top;も「機能する」と思われます

于 2013-10-27T17:41:00.367 に答える