code: public void roll(int field, int amount)
      {
          while (amount > 0) {
              roll(field, true);
              amount--;
          }
          while (amount < 0) {
              roll(field, false);
              amount++;
          }
      }
docs: Adds the specified (signed) amount to the specified calendar field
  without changing larger fields.  A negative amount means to roll
  down.
  
  <p>NOTE:  This default implementation on <code>Calendar</code> just repeatedly calls the
  version of {@link #roll(int,boolean) roll()} that rolls by one unit.  This may not
  always do the right thing.  For example, if the <code>DAY_OF_MONTH</code> field is 31,
  rolling through February will leave it set to 28.  The <code>GregorianCalendar</code>
  version of this function takes care of this problem.  Other subclasses
  should also provide overrides of this function that do the right thing.
  
  @param field the calendar field.
  @param amount the signed amount to add to the calendar <code>field</code>.
  @since 1.2
  @see #roll(int,boolean)
  @see #add(int,int)
  @see #set(int,int)