2016-03-20 1 views
2

Voici le codeerreurs dans une classe de pile générique (la plupart semblent faire avec des entrées underflow)

import java.util.EmptyStackException; 

public class MyGenericStack<Item> implements MyGenericStackInterface<Item> { 
private java.util.ArrayList<Item> list = new java.util.ArrayList<Item>(); 

/* 
* Retrieve the item that was most recently added to the stack, 
* which is the item at the top of the stack. 
* The item is removed from the stack. 
*/ 
public Item pop() throws EmptyStackException{ 
    if (isEmpty()) throw new EmptyStackException(); 
    else{ 
     Item thing = null; 
     if(list.get(size()-1) == null){ 
      thing = null; 
     } 
     else{ 

      thing = list.get(size()-1); 
     } 
     return thing; 
    } 
} 

/* 
* Retrieve the item at the top of the stack. 
* Does not modify the stack. 
*/ 
public Item peek() throws EmptyStackException{ 
    if (isEmpty()) { 
     throw new EmptyStackException(); 
    } 
    else{return list.get(size()-1); 

    } 

}; 

/* 
* Add item to the top of the stack. 
*/ 
public void push(Item item){ 

    list.add(item); 
}; 

/* 
* Return true if the stack is empty 
*/ 
public boolean isEmpty(){ 
    return list.isEmpty(); 

} 

/* 
* Return the number of items on the stack 
*/ 
public int size(){ 
    return list.size(); 
}; 


} 

Le problème est quand je teste tous les cas, je reçois ces 8 erreurs

java.lang.AssertionError: IsEmpty Error: isEmpty did not return true for empty stack after underflow. 

java.lang.AssertionError: Peek Error: Peeking at null value on top of stack did not return null. 

java.lang.AssertionError: Pop Error: Popping null value off stack did not return null. 

java.lang.AssertionError: Push Error: Pushed multiple string values, but failed to retrieve them in order (via pop). 

java.util.concurrent.TimeoutException (this test was labelled testReverseStringWithStack) 

java.lang.AssertionError: Size Error: Size did not return correct size after pushes after underflow. 

java.lang.AssertionError: Size Error: Size did not return 0 for empty stack after underflow. 

java.lang.AssertionError: Push Error: Pushed multiple int values, but failed to retrieve them in order (via pop). 

est-il possible de résoudre ces problèmes? Toute aide est appréciée.

+0

Cloud vous nous montrez le code des tests? Il me semble plus d'un problème avec le test qu'avec le code réel. –

Répondre

0

Votre méthode isEmpty() est définie en termes de champ List<> sous-jacente, mais votre méthode pop() ne supprime pas en fait un élément de la liste - il appelle que get() sur la liste, qui ne supprime pas l'élément de la liste. Donc, après quelques appels à push()/pop(), vous allez trouver que isEmpty() et size() sont incorrects.

0

Les problèmes que je peux voir, quand pop() est appelé, alors l'article n'est pas enlevé de la liste. supprimer l'élément que vous revenez de la liste. Cela devrait éviter les erreurs liées à l'insuffisance de flux.

0

Wow, je me sens un peu bête. Le problème était que j'ai juste oublié d'ajouter "list.remove (size-1)" à la méthode pop. Je ne l'aurais jamais remarqué si quelqu'un ne l'avait pas signalé, merci.