2016-09-11 4 views
0

スタックがいっぱいになったとき(たとえば5つの値を保持できる)、DropOutメソッドを実行する別の値をスタックにプッシュしようとするときにプログラムを作成しようとしています。セットはどこにありますか?ポジション0からポジション1などにスタックする。ポジション3 == 4に移動する。ここから、スタックのトップ値を削除する(この例では、ポジション4の値(5番目の値))ここから私はスタックの最上位に次の値を追加することができます....しかし、私のコードは意図したとおりに動作していません。私は初心者であり、利用可能な入力を感謝します。ありがとうございます。ドロップアウトスタックが機能しない

package jsjf; 

import jsjf.exceptions.*; 
import java.util.Arrays; 
import java.util.*; 


public class ArrayStack1<T> implements StackADT<T> 
{ 
    private final static int DEFAULT_CAPACITY = 5; 

    private int top; 
    private T[] stack; 
    private int next; 

public ArrayStack1() 
    { 
     this(DEFAULT_CAPACITY); 
} 


public ArrayStack1(int initialCapacity) 
{ 
    top = -1; 
    stack = (T[])(new Object[initialCapacity]); 


} 


    public void push(T element) 
{ 

    if (top+1==DEFAULT_CAPACITY){ 
    DropOut(); 
    //top=top-1; 
    pop(); 
    stack[top]=element; 
    } 
    top++; 
    stack[top] = element; 

} 



    public void DropOut(){ 

    for (int x=0; x<stack.length-1; x++){ 
    // if(x==stack.length){ 
    // stack[x]=null; 
    // } 
     stack[x]=stack[x+1]; 
    } 


    } 

    public T pop() throws EmptyCollectionException 
{ 
    if (isEmpty()) 
     throw new EmptyCollectionException("stack"); 


    T result = stack[top]; 
    stack[top] = null; 

    return result; 
} 


    public T peek() throws EmptyCollectionException 
{ 
    if (isEmpty()) 
     throw new EmptyCollectionException("stack"); 

    return stack[top]; 
} 


    public boolean isEmpty() 
{ 
    return (top < 0); 
} 


public int size(){ 
return (top+1); 
} 



    public String toString() 
{ 
    String result = ""; 

    for (int scan=0; scan <= top; scan++) 
    result = result + stack[scan].toString() + "\n"; 

    return result; 
} 

public static void main(String[] args) { 

    ArrayStack1<Integer> t1=new ArrayStack1<Integer>(5); 
    t1.push(5); 
    t1.push(3); 
    t1.push(6); 
    t1.push(5); 
    t1.push(3);// 
    t1.push(4); 

} 
} 

答えて

0

pushの場合、最大容量に達した時点で要素を2回積み重ねています。 elseで問題を解決する必要があります:

public void push(T element) 
{ 

    if (top+1==DEFAULT_CAPACITY){ 
     DropOut(); 
     //top=top-1; 
     pop(); 
     stack[top]=element; 
    } else { 
     top++; 
     stack[top] = element; 
    } 
} 
+0

一言...どのように私はそれを見ていませんでした!ハハは長い一日でした! –