+ All Categories
Home > Documents > CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday...

CS 2430 Day 24. Announcements Quiz this Friday Program 5 posted on Monday Program 4 due date: Friday...

Date post: 19-Jan-2016
Category:
Upload: madlyn-felicia-mccarthy
View: 212 times
Download: 0 times
Share this document with a friend
35
CS 2430 Day 24
Transcript
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.

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.

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.

Agenda

• Finish Queue examples

• Generics

• A generic Queue

Page 4: 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.

Go to THE THING:

https://xray.ion.uwplatt.edu/summerss

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.

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.

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.

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.

…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.

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.

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.

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.

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.

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.

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.

Any questions?

Page 16: 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.

Go to THE THING:

https://xray.ion.uwplatt.edu/summerss

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

Next: multiple inheritance


Recommended