In this lab we’ll explore an array-based implementation of a ring buffer(or circular buffer). Ring buffers are used for many things like producer/consumer tasks, computing moving averages, log files, and in this lab, simulating sound waves.
Be sure to read the pages 147–151 from Chapter 1 of the Intro to CS by the authors of our textbook.
Your ring buffer implementation should use an array as its underlying instance variable. The Algorithms book’s ResizingArrayQueue is also a good resource.
Employ the testing based approach we learned last week. Use assertions to check pre- and post-conditions and in-variants whenever you can. Create a main method in RingBuffer that acts as a simple, straight-forward client exercising all the methods.
Modifications:
Your RingBuffer should only throw an exception if you dequeue an empty buffer, if you try and enqueue a full buffer you should just overwrite the oldest entry.
The second constructor in GuitarString is not necessary: GuitarString(double[] init)
Modifications:
BONUS
RingBuffer<Double> ringbuffer = new RingBuffer<Double>(3.0);
for (double d: ringbuffer){
StdOut.println(d);
}