public final class Polynomial {

   // mutable members should be private
   private final int [] coefficients = new int [3];

   // Constant
   Polynomial (final int a) {
      this (a, 0, 0);
   }

   // Linear
   Polynomial (final int a, final int b) {
      this (a, b, 0);
   }

   // Quadratic
   Polynomial (final int a, final int b, final int c) {
      coefficients[0] = a;
      coefficients[1] = b;
      coefficients[2] = c;
   }

   // evalAt(x) == c[0] + c[1]*x + c[2]*x*x + ...
   int evalAt (int x) {
      // Horner's rule:  c[0] + x * (c[1] + x * (c[2] + ....))
      // Know by ancient Perian and Chinese mathematicians
      int sum = coefficients[coefficients.length-1];
      for (int i=coefficients.length-2; i>=0; i--) {
         sum = coefficients [i] + x * sum;
      }
      return sum;
   }

   boolean isLinear () {
      for (int i=2; i<coefficients.length; i++) {
         if (coefficients[i]!=0) return false;
      }
      return true;
   }

   @java.lang.Override // The annotation is recommended
   public String toString () {
      return String.format ("%d%+d*x%+d*x*x",
         coefficients[0], coefficients[1], coefficients[2]);
   }
}