Collections Data Structure Java

/*
 This program is a part of the companion code for Core Java 8th ed.
 (http://horstmann.com/corejava)
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see .
 */
/**
 * This program shows how to store tabular data in a 2D array.
 * 
 * @version 1.40 2004-02-10
 * @author Cay Horstmann
 */
public class CompoundInterest {
  public static void main(String[] args) {
    final double STARTRATE = 10;
    final int NRATES = 6;
    final int NYEARS = 10;
    // set interest rates to 10 . . . 15%
    double[] interestRate = new double[NRATES];
    for (int j = 0; j < interestRate.length; j++)
      interestRate[j] = (STARTRATE + j) / 100.0;
    double[][] balances = new double[NYEARS][NRATES];
    // set initial balances to 10000
    for (int j = 0; j < balances[0].length; j++)
      balances[0][j] = 10000;
    // compute interest for future years
    for (int i = 1; i < balances.length; i++) {
      for (int j = 0; j < balances[i].length; j++) {
        // get last year's balances from previous row
        double oldBalance = balances[i - 1][j];
        // compute interest
        double interest = oldBalance * interestRate[j];
        // compute this year's balances
        balances[i][j] = oldBalance + interest;
      }
    }
    // print one row of interest rates
    for (int j = 0; j < interestRate.length; j++)
      System.out.printf("%9.0f%%", 100 * interestRate[j]);
    System.out.println();
    // print balance table
    for (double[] row : balances) {
      // print table row
      for (double b : row)
        System.out.printf("%10.2f", b);
      System.out.println();
    }
  }
}