修改toString循环数组缓冲区

时间:2016-11-03 16:18:51

标签: java arrays

我有java代码,并且能够提供一个toString,如下面的代码所示:

       public class CircularArrayQueue<T> implements QueueADT<T>
{
   private final int DEFAULT_CAPACITY = 100;
   private int front, rear, count;
   private T[] queue; 

   //-----------------------------------------------------------------
   //  Creates an empty queue using the default capacity.
   //-----------------------------------------------------------------
   public CircularArrayQueue()
   {
      front = rear = count = 0;
      queue = (T[]) (new Object[DEFAULT_CAPACITY]);
   }

   //-----------------------------------------------------------------
   //  Creates an empty queue using the specified capacity.
   //-----------------------------------------------------------------
   public CircularArrayQueue (int initialCapacity)
   {
      front = rear = count = 0;
      queue = ( (T[])(new Object[initialCapacity]) );
   }

   //-----------------------------------------------------------------
   //  Adds the specified element to the rear of the queue, expanding
   //  the capacity of the queue array if necessary.
   //-----------------------------------------------------------------
   public void enqueue (T element)
   {
      if (size() == queue.length) 
         expandCapacity();

      queue[rear] = element;

      rear = (rear+1) % queue.length;

      count++;
   }

   //-----------------------------------------------------------------
   //  Removes the element at the front of the queue and returns a
   //  reference to it. Throws an EmptyCollectionException if the
   //  queue is empty.
   //-----------------------------------------------------------------
   public T dequeue() throws EmptyCollectionException
   {
      if (isEmpty())
         throw new EmptyCollectionException ("queue");

      T result = queue[front];
      queue[front] = null;

      front = (front+1) % queue.length;

      count--;

      return result;
   }

   //-----------------------------------------------------------------
   //  Returns a reference to the element at the front of the queue.
   //  The element is not removed from the queue.  Throws an
   //  EmptyCollectionException if the queue is empty.  
   //-----------------------------------------------------------------
   public T first() throws EmptyCollectionException
   {
      if (isEmpty())
         throw new EmptyCollectionException ("queue"); 

      return queue[front];
   }

   //-----------------------------------------------------------------
   //  Returns true if this queue is empty and false otherwise. 
   //-----------------------------------------------------------------
   public boolean isEmpty()
   {
      return (count == 0);
   }

   //-----------------------------------------------------------------
   //  Returns the number of elements currently in this queue.
   //-----------------------------------------------------------------
   public int size()
   {
      return count;
   }


   //-----------------------------------------------------------------
   //  Returns a string representation of this queue. 
   //-----------------------------------------------------------------
  public String toString()
  {
    String result = "";
    int scan = 0;

    while(scan < count)
    {
     if(queue[scan]!=null)
     {
       result += queue[scan].toString()+"\n";
     }
    scan++;
    }

    return result;

  }

   //-----------------------------------------------------------------
   //  Creates a new array to store the contents of the queue with
   //  twice the capacity of the old one.
   //-----------------------------------------------------------------
  public void expandCapacity()
  {
    T[] larger = (T[])(new Object[queue.length *2]);   

    for(int scan=0; scan < count; scan++)
    {
      larger[scan] = queue[front];
      front=(front+1) % queue.length;
    }

    front = 0;
    rear = count;
    queue = larger;
  }
}

如何根据队列的这些输出修改我的toString:

我想从一个显示汽车数量的初始字符串开始 如果队列为空,那么我将返回初始String。 如果前方位于后方或之前 我想从前到后为每辆车添加一条线 然后为从数组开头到后面1的那些添加行 否则我想在前后1之间为每辆车添加一条线。

这是我当前的toString():

public String toString()
   {
      String result = "";

      for (int scan=0; scan < rear; scan++) 
         result = result + queue[scan].toString() + "\n";

      return result;
   }

1 个答案:

答案 0 :(得分:1)

您编写了伪代码,其余几个if / else-if块。

  public String toString()
  {
    String result = String.format("There are %d items in the queue.", count);
    if (count == 0)
    {
      return result;
    }
    else if (front >= back)
    {
      for (int i = front; i < count; i++)
      {
        result += queue[i].toString() + "\n";
      }
      for (int i = 0; i < back; i++)
      {
        result += queue[i].toString() + "\n";
      }
    }
    else
    {
      for (int i = front; i < back; i++)
      {
        result += queue[i].toString() + "\n";
      }
    }
    return result;
  }