Diamond in the rough! Finding Gems in the rocks
You have added

public GemCounter() {
    // default constructor. Does nothing.
}


which is not needed for the program to work because,


  The compiler automatically provides a no-argument, default constructor
  for any class without constructors. This default constructor will call
  the no-argument constructor of the superclass. In this situation, the
  compiler will complain if the superclass doesn't have a no-argument
  constructor so you must verify that it does. If your class has no
  explicit superclass, then it has an implicit superclass of Object,
  which does have a no-argument constructor &#91;1&#93;.


therefore this also violates YAGNI


  "You aren't gonna need it" (acronym: YAGNI) is a principle of extreme
  programming (XP) that states a programmer should not add functionality
  until deemed necessary. XP co-founder Ron Jeffries has written:
  "Always implement things when you actually need them, never when you
  just foresee that you need them [2].



References


&#91;1&#93;“Providing Constructors for Your Classes.” [Online]. Available: http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html. [Accessed: 27-Aug-2014].
&#91;2&#93;“You aren’t gonna need it,” Wikipedia, the free encyclopedia. 24-Aug-2014.