CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday...
-
Upload
madlyn-felicia-mccarthy -
Category
Documents
-
view
212 -
download
0
Transcript of CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday...
![Page 1: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/1.jpg)
CS 2430
Day 24
![Page 2: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/2.jpg)
Announcements
• Quiz this Friday
• Program 5 posted on Monday
• Program 4 due date: Friday at 10pm
• Program 4 grace date: Wednesday at 10pm (don’t worry about what the WWW says)
![Page 3: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/3.jpg)
Agenda
• Finish Queue examples
• Generics
• A generic Queue
![Page 5: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/5.jpg)
The Queue class
![Page 6: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/6.jpg)
public class Queue
{
private static final int DEFAULT_SIZE = 10;
private Object[] items;
private int count, front, rear;
public Queue() { . . . }
public Queue(int inSize) { . . . }
public void enqueue(Object obj) { . . . }
public Object dequeue() { . . . }
public boolean isFull() { . . . }
public boolean isEmpty() { . . . }
public int size() { . . . }
public void clear() { . . . }
}
![Page 7: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/7.jpg)
Implementation of Queue methods…
![Page 8: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/8.jpg)
…you do it as part of Program 5
![Page 9: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/9.jpg)
Example
How many items are currently stored in the Queue?
![Page 10: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/10.jpg)
As implementerpublic int size()
{
return count;
}
![Page 11: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/11.jpg)
As userpublic static int size(Queue inQueue, int qSize)
{
int num = 0;
while (!inQueue.isEmpty())
{
inQueue.enqueue(inQueue.dequeue());
num++;
}
return num;
}
What’s wrong?
Infinite loop!
![Page 12: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/12.jpg)
As userpublic static int size(Queue inQueue, int qSize)
{
int num = 0;
Queue tq = new Queue(qSize);
while (!inQueue.isEmpty())
{
tq.enqueue(inQueue.dequeue());
num++;
}
while (!tq.isEmpty())
inQueue.enqueue(tq.dequeue());
return num;
}
All good!
![Page 13: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/13.jpg)
Example
How to reverse a given Queue?
Use a Stack!
![Page 14: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/14.jpg)
Another Example
How do you swap the back two elements of a Queue?
A B C D A B D C
![Page 15: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/15.jpg)
Any questions?
![Page 17: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/17.jpg)
Generic types
![Page 18: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/18.jpg)
How to make a generic container class in Java?
![Page 19: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/19.jpg)
First try
• Make a different class to hold each type of Object
• We would have BagOfDate, BagOfString, etc.
• Problem?
Too much similarity!
• Why write all that code?
![Page 20: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/20.jpg)
Second try
• Make containers backed by array of Object• Can hold any type of Object• Problem?
Casting required to “get” items
• Example:
Rational rat = (Rational)operands.pop();
• Awkward: Container could hold Rationals, Strings, Dates, etc.
![Page 21: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/21.jpg)
Java generics
• Can make a generic container class that is instantiated with a particular type (of Object)
• The “type” is a parameter to the class
• The “type” parameter MUST be a class, NOT a primitive type
![Page 22: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/22.jpg)
public class Queue
{
private static final int DEFAULT_MAX = 10;
private Object[] items;
private int front, rear, count;
public Queue() { . . . }
public Queue(int inSize) { . . . }
public boolean isEmpty() { . . . }
public boolean isFull() { . . . }
public void enqueue(Object obj) { . . . }
public Object dequeue() { . . . }
}
Not generic!
The $5 Queue
![Page 23: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/23.jpg)
public class Queue<E> // E must be a class, not a primitive
{
private static final int DEFAULT_MAX = 10;
private E[] items;
private int front, rear, count;
public Queue() { . . . }
public Queue(int inSize) { . . . }
public boolean isEmpty() { . . . }
public boolean isFull() { . . . }
public void enqueue(E obj) { . . . }
public E dequeue() { . . . }
}
Generic Queue
![Page 24: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/24.jpg)
public class Queue<E> // E must be a class, not a primitive
{
private static final int DEFAULT_MAX = 10;
private E[] items;
private int front, rear, count;
public Queue() { . . . }
public Queue(int inSize) { . . . }
public boolean isEmpty() { . . . }
public boolean isFull() { . . . }
public void enqueue(E obj) { . . . }
public E dequeue() { . . . }
}
Same as before, but with Object replaced by E
Generic Queue
![Page 25: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/25.jpg)
Implementation
![Page 26: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/26.jpg)
Constructorpublic Queue()
{
items = ???
}
![Page 27: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/27.jpg)
Does this work?public Queue()
{
items = new E[DEFAULT_MAX];
}
Java doesn’t allow this!
We need to create an array of Object and cast it to (E[]).
![Page 28: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/28.jpg)
Constructor fixed!public Queue()
{
items = (E[]) new Object[DEFAULT_MAX];
}
We might get a “warning” from the compiler.
We’ll just live with it.
![Page 29: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/29.jpg)
Constructorspublic Queue()
{
items = (E[]) new Object[DEFAULT_MAX];
}
public Queue(int inSize)
{
if (inSize < 0)
items = (E[]) new Object[DEFAULT_MAX];
else
items = (E[]) new Object[inSize];
}
![Page 30: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/30.jpg)
The rest is the same, but just replace Object with E
![Page 31: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/31.jpg)
Client codeQueue<Date> dq = new Queue<Date>(365);
Queue<Rational> rq = new Queue<Rational>(40);
Date date = dq.dequeue(); // no cast
Rational rat = rq.dequeue();
rq.enqueue(new Rational(1, 2)); // same as before
![Page 32: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/32.jpg)
Can also do thisQueue<Date> dq = new Queue(365);
Queue<Rational> rq = new Queue(40);
Date date = dq.dequeue(); // no cast
Rational rat = rq.dequeue();
rq.enqueue(new Rational(1, 2)); // same as before
![Page 33: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/33.jpg)
Can’t do this!Queue<Date> dq = new Queue(365);
Queue<Rational> rq = new Queue(40);
Date date = dq.dequeue();
Rational rat = rq.dequeue();
rq.enqueue(new Rational(1, 2));
dq.enqueue(rat); // this is a syntax error!
![Page 34: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/34.jpg)
Or this!Queue<Date> dq = new Queue(365);
Queue<Rational> rq = new Queue(40);
Date date = dq.dequeue();
Rational rat = rq.dequeue();
rq.enqueue(new Rational(1, 2));
rat = dq.dequeue(); // this is a syntax error!
![Page 35: CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday at 10pm Program 4 grace date: Wednesday at 10pm (don’t.](https://reader035.fdocuments.us/reader035/viewer/2022070414/5697c00d1a28abf838cc9827/html5/thumbnails/35.jpg)
Next: multiple inheritance