2016-03-20 2 views
2

Вот кодошибки в обобщенном классе стеки (большинство, кажется, делать с нижним продуктом входами)

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(); 
}; 


} 

Проблема заключается в том, когда я проверить все случаи, которые я получаю эти 8 ошибок

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). 

Есть ли способ исправить эти ошибки? Любая помощь приветствуется.

+0

Облако вы показываете нам код тестов? Это больше похоже на проблему с тестом, чем с фактическим кодом. –

ответ

0

Ваш метод isEmpty() определяется в терминах базового List<> поля, но ваш метод pop() не удаляет элемент из списка - это вызывает только get() в списке, который не удаляет элемент из списка. Поэтому после нескольких звонков в push()/pop() вы обнаружите, что isEmpty() и size() являются неправильными.

0

Проблемы, которые я вижу, когда вызывается pop(), то элемент не удаляется из списка. удалите элемент, который вы вернете из списка. Это должно привести к ошибкам, связанным с недостаточным потоком.

0

Вау, я чувствую себя немного глупо. Проблема заключалась в том, что я просто забыл добавить «list.remove (size-1)» к методу pop. Не заметила бы этого, если бы кто-то не указал на это, спасибо.

Смежные вопросы