возвращение среднего элемента в стеке - PullRequest
0 голосов
/ 23 августа 2011

Мне нужно создать метод peek MidElement, чтобы вернуть средний элемент стека. Поэтому я должен использовать ArrayList или алгоритм TORTOISE-HARE.

Ниже приведен мой класс, у которого есть метод с именем peekMidElement. Как мне сослаться Size() на ArrayList. Когда я компилирую следующее, я получаю IndexOutOFBoundsExcption в ArrayList.RangeCheck(UnknownSource) & в ArrayList.get(UnknownSource)

public class SortableStack<E extends Comparable<E>> implements ISortableStack<E> {  
        private int N;            
        private Node first;       
    private ArrayList<E> listOne = new ArrayList<E>(); 
    /* I have to reference the Stack to array list 
      which I am going use for finding the size of the stack */

    public boolean isEmpty() {  
            return first == null;  
        }  

        public int size() {  
            return N;  
        }  


    public E peekMidElement() {  
        if(listOne.size() <= 0){  
        throw new EmptyStackException();  
        }  

        return listOne.get(listOne.size()/2);  
     } 

1 Ответ

0 голосов
/ 23 августа 2011

Я не вижу, как фрагмент кода, который вы дали, может бросить IndexOutOfBoundsExcption в указанную вами точку.Я пришел к выводу, что:

  • фрагмент кода не является действительным кодом (например, он был склеен из большого класса, исключая некоторые важные детали), или

  • исключение не выдается в указанном вами месте, или

  • ... этот класс (который не является потокобезопасным) используется в несколькихпотоковое приложение без адекватной синхронизации.Сценарий состоит в том, что какой-то другой поток удаляет группу элементов из listOne в самый неподходящий момент.Это маловероятно, и если бы это было причиной, сбой произошел бы очень редко .

...