BurgessDeque.java is a program that implements and demonstrates a deque interfac
ID: 3602698 • Letter: B
Question
BurgessDeque.java is a program that implements and demonstrates a deque interface. In the main method I am having issues with line 200 throwing a NullPointerException. I have done basically the exact project in the past but this one requires the use of the NoSuchElementException so that is where I believe I am going wrong. Please take a look at my code and help me fix it. Note: All methods must have time complexity O(1) and the NoSuchElementException has to be used.
DoubleNode.java
/**
* Represents nodes in a doubly linked list
*
* @author Breanna Burgess
* @version 1.0
*/
public class DoubleNode<Item>
{
private DoubleNode<Item> previous;
private DoubleNode<Item> next;
private Item element;
/**
* Creates an empty double node
*/
public DoubleNode()
{
previous = null;
next = null;
element = null;
}
/**
* Creates a double node and stores specified element
* @param elem element to be stored
*/
public DoubleNode(Item elem)
{
previous = null;
next = null;
element = elem;
}
/**
* Returns the following node
* @return reference to next node
*/
public DoubleNode<Item> getNext()
{
return next;
}
/**
* Sets the following node to specified node
* @param node node set to follow this one
*/
public void setNext(DoubleNode<Item> node)
{
next = node;
}
/**
* Returns the prior node to this one
* @return reference to previous node
*/
public DoubleNode<Item> getPrev()
{
return previous;
}
/**
* Sets the previous node to specified node
* @param node node previous to this one
*/
public void setPrev(DoubleNode<Item> node)
{
previous = node;
}
/**
* Returns the element stored in this node
* @return element stores in this node
*/
public Item getElement()
{
return element;
}
/**
* Sets the element in this node
* @param elem element to be stored in this node
*/
public void setElement(Item elem)
{
element = elem;
}
} // end class
BurgessDeque.java
/**
* This program provides an implementation of the Deque interface
* and demonstrates it.
*
* @author Breanna Burgess
* @version 1.0
*/
import java.util.NoSuchElementException;
//TODO: implement.
public class BurgessDeque<Item> implements Deque<Item>
{
private int count;
private DoubleNode<Item> head;
private DoubleNode<Item> tail;
/**
* Creates a deque
*
*/
public BurgessDeque()
{
count = 0;
head = tail = null;
}
/**
* Adds one element to the front of this deque.
* @param element the element to be added to the front of the deque
*/
public void enqueueFront(Item element)
{
DoubleNode<Item> node = new DoubleNode<Item>(element);
if(isEmpty())
tail = node;
else
{
node.setNext(head);
head.setPrev(node);
}
head = node;
count++;
}
/**
* Adds one element to the back of this deque.
* @param element the element to be added to the back of the deque
*/
public void enqueueBack(Item element)
{
DoubleNode<Item> node = new DoubleNode<Item>(element);
if(isEmpty())
head = node;
else
tail.setElement(element);
tail = node;
count++;
}
/**
* Removes and returns the element at the front of this deque.
* Throws an exception if the deque is empty.
* @return the element at the front of this deque
* @throws NoSuchElementException if the deque is empty
*/
public Item dequeueFront() throws NoSuchElementException
{
if(isEmpty())
throw new NoSuchElementException("deque is empty");
Item result = head.getElement();
head = head.getNext();
count--;
if (isEmpty())
head = tail = null;
return result;
}
/**
* Removes and returns the element at the back of this deque.
* Throw an exception if the deque is empty.
* @return the element at the back of the deque.
* @throws NoSuchElementException if the deque is empty
*/
public Item dequeueBack() throws NoSuchElementException
{
if(isEmpty())
throw new NoSuchElementException("deque is empty");
Item result = tail.getElement();
tail = tail.getPrev();
count--;
if(isEmpty())
head = null;
else
tail.setNext(null);
return result;
}
/**
* Returns, without removing, the element at the front of this deque.
* Should throw an exception if the deque is empty.
* @return the first element in the deque
* @throws NoSuchElementException if the deque is empty
*/
public Item first() throws NoSuchElementException
{
if(isEmpty())
throw new NoSuchElementException("deque is empty");
return head.getElement();
}
/**
* Returns, without removing, the element at the back of this deque.
* Should throw an exception if the deque is empty.
* @return the last element in the deque
* @throws NoSuchElementException if the deque is empty
*/
public Item last() throws NoSuchElementException
{
if(isEmpty())
throw new NoSuchElementException("deque is empty");
return tail.getElement();
}
/**
* Returns true if this deque is empty and false otherwise.
* @return if deque empty
*/
public boolean isEmpty()
{
return (count == 0);
}
/**
* Returns the number of elements in this deque.
* @return the number of elements in the deque
*/
public int size()
{
return count;
}
/**
* Returns a string representation of this deque. The back element
* occurs first, and each element is separated by a space. If the
* deque is empty, returns "empty".
* @return the string representation of the deque
*/
@Override
public String toString()
{
String result;
if(isEmpty())
return "empty";
else
{
result = "";
DoubleNode current = head;
while(current != null)
{
result = result + current.getElement() + " ";
current = current.getNext();
}
}
return result;
}
/**
* Program entry point for deque.
* @param args command line arguments
*/
public static void main(String[] args)
{
BurgessDeque<Integer> deque = new BurgessDeque<>();
//standard queue behavior
deque.enqueueBack(3);
deque.enqueueBack(7);
deque.enqueueBack(4);
deque.dequeueFront();
deque.enqueueBack(9);
deque.enqueueBack(8);
deque.dequeueFront();
System.out.println("size: " + deque.size());
System.out.println("contents: " + deque.toString());
//deque features
System.out.println(deque.dequeueFront());
deque.enqueueFront(1);
deque.enqueueFront(11);
deque.enqueueFront(3);
deque.enqueueFront(5);
System.out.println(deque.dequeueBack());
System.out.println(deque.dequeueBack());
System.out.println(deque.last());
deque.dequeueFront();
deque.dequeueFront();
System.out.println(deque.first());
System.out.println("size: " + deque.size());
System.out.println("contents: " + deque.toString());
}
Explanation / Answer
Here when you are adding element to deque and deque is empty then need to assign the new node to head and tail and same thing needs be done for both type of enqueue operations. Below is updated code of BurgessDeque.java:
import java.util.Collection;
/**
* This program provides an implementation of the Deque interface
* and demonstrates it.
*
* @author Breanna Burgess
* @version 1.0
*/
import java.util.NoSuchElementException;
//TODO: implement.
public class BurgessDeque<Item> implements Deque<Item> {
private int count;
private DoubleNode<Item> head;
private DoubleNode<Item> tail;
/**
* Creates a deque
*
*/
public BurgessDeque() {
count = 0;
head = tail = null;
}
/**
* Adds one element to the front of this deque.
*
* @param element
* the element to be added to the front of the deque
*/
public void enqueueFront(Item element) {
DoubleNode<Item> node = new DoubleNode<Item>(element);
if (isEmpty()) {
tail = node;
head = node;
}
else {
node.setNext(head);
head.setPrev(node);
}
head = node;
count++;
}
/**
* Adds one element to the back of this deque.
*
* @param element
* the element to be added to the back of the deque
*/
public void enqueueBack(Item element) {
DoubleNode<Item> node = new DoubleNode<Item>(element);
if (isEmpty()){
head = node;
tail = node;
}
else {
tail.setNext(node);
node.setPrev(tail);
}
tail = node;
count++;
}
/**
* Removes and returns the element at the front of this deque. Throws an
* exception if the deque is empty.
*
* @return the element at the front of this deque
* @throws NoSuchElementException
* if the deque is empty
*/
public Item dequeueFront() throws NoSuchElementException {
if (isEmpty())
throw new NoSuchElementException("deque is empty");
Item result = head.getElement();
head = head.getNext();
count--;
if (isEmpty())
head = tail = null;
return result;
}
/**
* Removes and returns the element at the back of this deque. Throw an exception
* if the deque is empty.
*
* @return the element at the back of the deque.
* @throws NoSuchElementException
* if the deque is empty
*/
public Item dequeueBack() throws NoSuchElementException {
if (isEmpty())
throw new NoSuchElementException("deque is empty");
Item result = tail.getElement();
tail = tail.getPrev();
count--;
if (isEmpty())
head = tail = null;
else
tail.setNext(null);
return result;
}
/**
* Returns, without removing, the element at the front of this deque. Should
* throw an exception if the deque is empty.
*
* @return the first element in the deque
* @throws NoSuchElementException
* if the deque is empty
*/
public Item first() throws NoSuchElementException {
if (isEmpty())
throw new NoSuchElementException("deque is empty");
return head.getElement();
}
/**
* Returns, without removing, the element at the back of this deque. Should
* throw an exception if the deque is empty.
*
* @return the last element in the deque
* @throws NoSuchElementException
* if the deque is empty
*/
public Item last() throws NoSuchElementException {
if (isEmpty())
throw new NoSuchElementException("deque is empty");
return tail.getElement();
}
/**
* Returns true if this deque is empty and false otherwise.
*
* @return if deque empty
*/
public boolean isEmpty() {
return (count == 0);
}
/**
* Returns the number of elements in this deque.
*
* @return the number of elements in the deque
*/
public int size() {
return count;
}
/**
* Returns a string representation of this deque. The back element occurs first,
* and each element is separated by a space. If the deque is empty, returns
* "empty".
*
* @return the string representation of the deque
*/
@Override
public String toString() {
String result;
if (isEmpty())
return "empty";
else {
result = "";
DoubleNode current = head;
while (current != null) {
result = result + current.getElement() + " ";
current = current.getNext();
}
}
return result;
}
/**
* Program entry point for deque.
* @param args command line arguments
*/
public static void main(String[] args)
{
BurgessDeque<Integer> deque = new BurgessDeque<>();
//standard queue behavior
deque.enqueueBack(3);
deque.enqueueBack(7);
deque.enqueueBack(4);
deque.dequeueFront();
deque.enqueueBack(9);
deque.enqueueBack(8);
deque.dequeueFront();
System.out.println("size: " + deque.size());
System.out.println("contents: " + deque.toString());
//deque features
System.out.println(deque.dequeueFront());
deque.enqueueFront(1);
deque.enqueueFront(11);
deque.enqueueFront(3);
deque.enqueueFront(5);
System.out.println(deque.dequeueBack());
System.out.println(deque.dequeueBack());
System.out.println(deque.last());
deque.dequeueFront();
deque.dequeueFront();
System.out.println(deque.first());
System.out.println("size: " + deque.size());
System.out.println("contents: " + deque.toString());
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.