Skip to content

Instantly share code, notes, and snippets.

@chrislukkk
Created July 5, 2014 19:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save chrislukkk/dd3de2826162c1d403b2 to your computer and use it in GitHub Desktop.
Save chrislukkk/dd3de2826162c1d403b2 to your computer and use it in GitHub Desktop.
CareerCup_3.7 - PetShelter
package Chapter3;
import java.util.Date;
public abstract class Pet {
private Date arrivedTime;
protected String name;
public Pet() {
arrivedTime = new Date();
}
public abstract PetKind kind();
public Date getArriveTime() {
return arrivedTime;
};
public String getName() {
return name;
};
}
public class Dog extends Pet {
public Dog(String n) {
name = n;
}
@Override
public PetKind kind() {
return PetKind.Dog;
}
}
public class Cat extends Pet {
public Cat(String n) {
name = n;
}
@Override
public PetKind kind() {
return PetKind.Cat;
}
}
public enum PetKind {
Cat,
Dog
}
package Chapter3;
import java.util.LinkedList;
import java.util.Queue;
public class Shelter {
private Queue<Dog> dogQueue = new LinkedList<Dog>();
private Queue<Cat> catQueue = new LinkedList<Cat>();
public void enqueue(Pet p) {
switch (p.kind()) {
case Dog:
dogQueue.add((Dog) p);
break;
case Cat:
catQueue.add((Cat) p);
break;
default:
break;
}
}
public Cat dequeueCat() {
return catQueue.isEmpty() ? null : catQueue.remove();
}
public Dog dequeueDog() {
return dogQueue.isEmpty() ? null : dogQueue.remove();
}
public Pet dequeueAny() {
if (catQueue.isEmpty())
return dogQueue.isEmpty() ? null : dogQueue.remove();
if (dogQueue.isEmpty())
return catQueue.isEmpty() ? null : catQueue.remove();
return dogQueue.peek().getArriveTime()
.compareTo(catQueue.peek().getArriveTime()) < 0 ?
dogQueue .remove() : catQueue.remove();
}
public static void main(String[] args) throws InterruptedException {
Shelter shelter = new Shelter();
shelter.enqueue(new Cat("Tom"));
Thread.sleep(100);
shelter.enqueue(new Dog("Goofy"));
Thread.sleep(100);
shelter.enqueue(new Dog("Hazard"));
Thread.sleep(100);
shelter.enqueue(new Cat("Garfield"));
shelter.print();
System.out.println("dequeue any = " + shelter.dequeueAny().getName());
System.out.println("dequeue dog = " + shelter.dequeueDog().getName());
System.out.println("dequeue cat = " + shelter.dequeueCat().getName());
}
private void print() {
System.out.print("Cat: ");
for (Cat c : catQueue)
System.out.print(c.getName() + ", ");
System.out.println();
System.out.print("Dog: ");
for (Dog d : dogQueue)
System.out.print(d.getName() + ", ");
System.out.println();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment