// CSC 240 - Diagnostic Q3 - Design a class (CSC 142 OOP -> the bridge to 240) // id: 1=Bulbasaur, 2=Ivysaur, 3=Venusaur (start 1); level starts at 1. // setLevel evolves it; getName returns the name; plus toString, equals, copy. public class Q3_Bulbasaur { private int id = 1; private int level = 1; public void setLevel(int lv) { level = lv; if (lv >= 32) id = 3; // Venusaur else if (lv >= 16) id = 2; // Ivysaur // else stays Bulbasaur (id = 1) - note: does not "de-evolve" below 16 } public int getLevel() { return level; } public int getID() { return id; } public String getName() { if (id == 3) return "Venusaur"; if (id == 2) return "Ivysaur"; return "Bulbasaur"; } // output the object's state @Override public String toString() { return getName() + " (id=" + id + ", level=" + level + ")"; } // two Bulbasaur objects are equal when BOTH id and level match @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Q3_Bulbasaur)) return false; Q3_Bulbasaur other = (Q3_Bulbasaur) o; return this.id == other.id && this.level == other.level; } // clone: a new object with the same state (a "deep" copy of the values) public Q3_Bulbasaur copy() { Q3_Bulbasaur c = new Q3_Bulbasaur(); c.id = this.id; c.level = this.level; return c; } // ---- demo ---- public static void main(String[] args) { Q3_Bulbasaur b = new Q3_Bulbasaur(); System.out.println(b); // Bulbasaur (id=1, level=1) b.setLevel(16); System.out.println(b); // Ivysaur (id=2, level=16) b.setLevel(40); System.out.println(b); // Venusaur (id=3, level=40) Q3_Bulbasaur clone = b.copy(); System.out.println("equals copy? " + b.equals(clone)); // true Q3_Bulbasaur fresh = new Q3_Bulbasaur(); System.out.println("equals fresh? " + b.equals(fresh)); // false } }