Вопрос об обобщении Java - PullRequest
       30

Вопрос об обобщении Java

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

Queue12 - это интерфейс, QueueImp12 - это реализация Queue12.Поэтому я пытаюсь проверить мой QueueImp12, но когда я запускаю его (он компилируется) в затмении, мой вывод завершается в консоли.Я считаю, что я создал RingBuffer правильно.Если мой тест выглядит нормально, значит, что-то не так с моей реализацией или затмением.Спасибо

import java.util.NoSuchElementException;


public class QueueImpl12<T> implements Queue12<T> 
{

private int _size, _backIdx, _frontIdx;
private static final int _defaultCapacity = 128;
private T[] _ringBuffer;



public QueueImpl12(int capacity)
{
    _ringBuffer = (T[]) new Object[capacity];
    clear();    
}


public QueueImpl12()
{
    _ringBuffer = (T[]) new Object[_defaultCapacity];
    clear();
}

private int wrapIdx(int index)
{

    return index % capacity();
}



public void clear() 
{
    _backIdx = 0;
    _frontIdx = 0;
    _size = 0;

}

@Override
public int capacity() 
{
    // TODO Auto-generated method stub
    return _ringBuffer.length;
}

@Override
public int size() 
{
    // TODO Auto-generated method stub
    return _size;
}

@Override
public boolean enqueue(T o) 
{
    //add o to back of queue


    if(_ringBuffer.length == _size)
    {
        return false;
    }


       _ringBuffer[_backIdx] = o;
        _backIdx = wrapIdx(_backIdx + 1 );
        _size++;





    return true;
}

@Override
public T dequeue()
{
    if(_size == 0)  //empty list
    {
        throw new NoSuchElementException();
    }

    T tempObj = _ringBuffer[_frontIdx];     //store frontIdx object
    _ringBuffer[_frontIdx] = null;          
    _frontIdx++;



    _size--;
    return tempObj;
}

@Override
public T peek() 
{

    return _ringBuffer[_frontIdx];
}

}




public class P3test  
{
public static<T> void main(String[] args) 
{
    final Queue12<T> ringBuffer = new QueueImpl12<T>();
    T o = (T) new String("this");
    ringBuffer.enqueue(o); //add element to the back
    ringBuffer.dequeue();  //remove/return element in the front

}
 }

1 Ответ

2 голосов
/ 26 августа 2011

То, что «завершено» вы видели в последнее время, является ожидаемым поведением после завершения вашей программы.

Положите System.outs или asserts, чтобы убедиться, что ваш код работает (здесь он выполняется с некоторыми ужаснымивыдает предупреждения, но работает)

final Queue12<T> ringBuffer = new QueueImpl12<T>();
T o = (T) new String("this");
ringBuffer.enqueue(o); //add element to the back
System.out.println(ringBuffer.peek());//this should print 'this' in the console\
//assertEquals('this', ringBuffer.peek());
ringBuffer.dequeue();  //remove/return element in the front

Узнайте, как использовать дженерики и тесты.И не помещайте универсальный аргумент в основную функцию, это бесполезно там.

...