Untitled
unknown
plain_text
2 years ago
4.6 kB
8
Indexable
// Modify this class to hold different types, instead of only int. Don't copy! class HoldOne { protected int held = 0; public int put(int item) { int previouslyHeld = held; held = item; return previouslyHeld; } } class HoldMany { protected static final int MAX_ITEMS = 3; protected int heldCount = 0; protected int[] held = new int[MAX_ITEMS]; /** * If there is space for the item, it will be added to the end of the list. * If not, the first item in the list will be removed, everything else will be shifted towards the beginning, and the new item will be added to the end. * * @returns 0 if there was room for the item. Otherwise, returns the removed first item. */ public int put(int item) { int previouslyHeld = 0; if (heldCount == MAX_ITEMS) { previouslyHeld = held[0]; for (int i = 1; i < MAX_ITEMS; i++) { held[i-1] = held[i]; } held[MAX_ITEMS-1] = item; } else { held[heldCount] = item; ++heldCount; } return previouslyHeld; } /** * Removes the first item and shortens the list. * * @returns 0 if the list was empty. Otherwise, returns the removed first item. */ public int drop() { int previouslyHeld = 0; if (heldCount > 0) { previouslyHeld = held[0]; for (int i = 1; i < MAX_ITEMS; i++) { held[i-1] = held[i]; } heldCount--; } return previouslyHeld; } } interface Animal { public void eat(int food) throws Exception; public int poop() throws Exception; } // Mouse can only eat one thing and then it will poop it class Mouse extends HoldOne implements Animal { @Override public void eat(int food) throws Exception { if (held != 0) throw new Exception("I\'m full! I need to poop, first!"); put(food); } @Override public int poop() throws Exception { if (held == 0) throw new Exception("I\'m empty! Feed me, first!"); return put(0); // You'll need to change this to put(null) when you switch to generics, since you can only use Objects as a type in a generic } } // Cow can eat several things and then poop it all class Cow extends HoldMany implements Animal { public void eat(int food) throws Exception { if (heldCount == MAX_ITEMS) throw new Exception("I\'m full! I need to poop, first!"); put(food); } public int poop() throws Exception { if (heldCount == 0) throw new Exception("I\'m empty! Feed me, first!"); int firstEaten = drop(); while (heldCount > 0) { drop(); } return firstEaten; } } public class MyClass { // Modify this function to accept different types. Don't copy! private static void printThing(int thing) { System.out.println("" + thing); } // Modify this function to only accept animals that extend HoldMany. Those animals should be able to eat different types. Don't copy! private static void handleLargeAnimal(Animal a, int[] food) throws Exception { for (int item : food) { a.eat(item); } printThing(a.poop()); } // Modify this function to only accept animals that extend HoldOne. Those animals should be able to eat different types. Don't copy! private static void handleSmallAnimal(Animal a, int food) throws Exception { a.eat(food); printThing(a.poop()); } public static void main(String args[]) throws Exception { HoldOne intHolder = new HoldOne(); printThing(intHolder.put(20)); printThing(intHolder.put(-1)); Cow c = new Cow(); handleLargeAnimal(c, new int[] {1, 2, 3}); Mouse m = new Mouse(); handleSmallAnimal(m, 42); /* Uncomment this section and make it work! HoldOne doubleHolder = new HoldOne(1.5); printThing(doubleHolder.put(3.5)); printThing(doubleHolder.put(-1.0)); HoldOne stringHolder = new HoldOne("Hello"); printThing(stringHolder.put("There")); printThing(stringHolder.put("!")); Cow stringCow = new Cow(); handleLargeAnimal(c, new String[] {"a", "b", "c"}); Mouse stringMouse = new Mouse(); handleSmallAnimal(m, "Meep"); */ } }
Editor is loading...