title: Getting printed text to align properly
body: <p>I'm a totally novice programmer, and I'm pretty confused by how to use printf. The use of printf in my code is at the end of the paymentCalc method; I'm trying to print data to a line, specify 2 decimal points to print, and pad it 10 spaces before printing the next output. 
  The code isnt formatting at all. What am I doing wrong here? It's all printing on the same line, but it's printing a million decimals, and it doesnt seem to be padding properly. </p>
  
  <pre><code>/*
   * Step 1: Get starting annual interest rate
   * Step 2: Get ending annual interest rate
   * Step 3: Get increment rate
   * Step 4: Get First # of years for repayment
   * Step 5: Get Last # of years for repayment
   * Step 6: Get # of years to increment by
   * Step 7: Get loan amount
   * 
   * Convert annual rates to monthly rates MIR = Annual rate/12
   * MTP = # of years * 12
   * 
   * MIR = monthly interest rate
   * MTP = months to pay
   * Annuity Factor =(mir*(1+mir)^mtp)/(((1+mir)^mtp)-1)
   * Payment = Amount Loaned * Annuity Factor
   * 
   * 
   * Produce a list of possible loan payments
   * Based on a series of annual interest rates
   * Start at user entered rate and increment until it hits user entered max
   * Display annual payment as monthly payments
   *  */
  
  
  import java.io.*;
  import java.util.*;
  import java.text.*;
  import java.math.*;
  
  public class methodshomework {
  public static void main(String[] args) {
  
  Scanner scanner = new Scanner(System.in);  
    //VARIABLES
    //amounts in years
    double startAnnInt = 0;
    double endAnnInt = 0;
    double incRate = 0;
    double incRatePercent = 0;
    double firstYears = 0;
    double lastYears = 0;
    double incYears = 0;
    double loanAmt = 0;
    //amounts in months
    double startMonthInt = 0;
    double endMonthInt = 0;
    double monthIncRate = 0;
    double firstMonths = 0;
    double lastMonths = 0;
    double incMonths = 0;
    double monthIncRatePercent = 0;
    double annIncRatePercent = 0;
  
    System.out.println("Hello, and welcome to the loan calculator");
    //Acquire necessary data
    System.out.println("What is the starting annual interest rate? (please enter as XX, where XX = XX%)");
    startAnnInt = (scanner.nextDouble()/100);
    System.out.println("What is the ending annual interest rate? (please enter as XX, where XX = XX%)");
    endAnnInt = (scanner.nextDouble()/100);
    System.out.println("What is the annual increment rate? (please enter as XX, where XX = XX%)");
    incRate = (scanner.nextDouble()/100);
    System.out.println("What is the first term for payment (in years)?");
    firstYears = scanner.nextDouble();
    System.out.println("What is the last term for payment (in years)?");
    lastYears = scanner.nextDouble();
    System.out.println("What is the term increment (in years)?");
    incYears = scanner.nextDouble();
    System.out.println("What is the loan amount? (in the form XXXXXX, where XXXXXX = $XXX,XXX)");
    loanAmt = scanner.nextDouble();
  
  
    double[] monthArray = yearToMonth(firstYears, lastYears, incYears, startAnnInt, endAnnInt, incRate);
    firstMonths = monthArray[0];
    lastMonths = monthArray[1];
    incMonths = monthArray[2];
    startMonthInt = monthArray[3];
    endMonthInt = monthArray[4];
    monthIncRate = monthArray[5];
    monthIncRatePercent = monthArray[6];
    annIncRatePercent = monthArray[7];
  
    paymentCalc(startMonthInt,  endMonthInt,  monthIncRate,  firstMonths,  lastMonths,  incMonths,  loanAmt,  firstYears,  lastYears,  incYears, startAnnInt, endAnnInt, incRate);
  
  }
  
  
  //MODULES HERE
  
  public static double[] yearToMonth(double firstYears, double lastYears, double incYears, double startAnnInt, double endAnnInt, double incRate){
    double firstMonths = 0;
    double lastMonths = 0;
    double incMonths = 0;
    double startMonthInt = 0;
    double endMonthInt = 0;
    double monthIncRate = 0;
    double monthIncRatePercent = 0;
    double annIncRatePercent = 0;
  
    //do our conversions
    firstMonths = (firstYears * 12);
    lastMonths = (lastYears * 12);
    incMonths = (incYears * 12);
    startMonthInt = (startAnnInt / 12);
    endMonthInt = (endAnnInt / 12);
    monthIncRate = (incRate / 12);
    monthIncRatePercent = (monthIncRate/100);
    annIncRatePercent = (incRate/100);
  
    //put our conversions into an array
    double[] monthArray = {firstMonths, lastMonths, incMonths, startMonthInt, endMonthInt, monthIncRate, monthIncRatePercent, annIncRatePercent};
  
    //return our conversions
    return monthArray;
  }
  
  
  public static void paymentCalc(double startMonthInt, double endMonthInt, double monthIncRate, double firstMonths, double lastMonths, double incMonths, double loanAmt, double firstYears, double lastYears, double incYears, double startAnnInt, double endAnnInt, double incRate){
    double monthInt = 0;
    double monthsToPay = 0;
    double rowNumber = (((lastYears - firstYears))/incYears);
    double rowNumberWithInt = (rowNumber + 1);
    double colNumber = ((endMonthInt - startMonthInt)/monthIncRate);
    double colNumberWithTop = (colNumber+1);
    double currentYears = 0;
    double currentMonths = 0;
    double currentMonthInt = 0;
    double currentPayment = 0;
    double currentAnnInt = 0;
    double annuityAmt = 0;
   //counting columns
    for (double i = 0; i &lt;= colNumberWithTop; i++) {
      //printing the top column
      if (i == 0){
       System.out.printf("%-10s", "Interest Rate");  
       for (double k = 0; k &lt;= rowNumber; k++) {
           currentYears = (firstYears + (incYears * i));
           System.out.printf("%10s", currentYears + " Years"); } 
      } else if (i &gt; 0) {
        //finding annual interest rate for printing, and monthly interest rate as a decimal for math
        currentAnnInt = (startAnnInt + (incRate * i));
        currentMonthInt = ((currentAnnInt/100)/12);
        System.out.printf("%.2f10s\n", (currentAnnInt * 100));
        for (double k = 0; k &lt;= rowNumber; k++) {
             monthsToPay = (startMonthInt + (monthIncRate * i));
             annuityAmt = annuityCalc(currentMonthInt, monthsToPay);
             currentPayment = (loanAmt * annuityAmt);
             System.out.printf("%.2f10s", currentPayment);
  
        }
  
      }
  
      }
  
  
       }
  
  
  
  
  public static double annuityCalc(double monthInt, double monthsToPay){
    double annuityFactor = 0;
    double mirPow = 0;
    mirPow = Math.pow((1+monthInt), monthsToPay);
    annuityFactor = ((monthInt*mirPow)/(mirPow-1));
    return annuityFactor;
  }
  
  }
  </code></pre>
  
  <p>EDIT:
  I changed the code to </p>
  
  <pre><code>  for (double i = 0; i &lt;= colNumberWithTop; i++) {
      //printing the top column
      if (i == 0){
       System.out.printf("%10", "Interest Rate");  
       for (double k = 0; k &lt;= rowNumber; k++) {
           currentYears = (firstYears + (incYears * i));
           System.out.printf("%10", currentYears + " Years"); } 
      } else if (i &gt; 0) {
        //finding annual interest rate for printing, and monthly interest rate as a decimal for math
        currentAnnInt = (startAnnInt + (incRate * i));
        currentMonthInt = ((currentAnnInt/100)/12);
        System.out.printf("%10.2f\n", currentAnnInt);
        for (double k = 0; k &lt;= rowNumber; k++) {
             monthsToPay = (startMonthInt + (monthIncRate * i));
             annuityAmt = annuityCalc(currentMonthInt, monthsToPay);
             currentPayment = (loanAmt * annuityAmt);
             System.out.printf("%10.2f", currentPayment);
  
        }
  </code></pre>
  
  <p>And it's now giving me "java.util.UnknownFormatConversionException: Conversion = '1'"</p>
  
  <p>EDIT 2:
  I've changed the code to </p>
  
  <pre><code>public static void paymentCalc(double startMonthInt, double endMonthInt, double monthIncRate, double firstMonths, double lastMonths, double incMonths, double loanAmt, double firstYears, double lastYears, double incYears, double startAnnInt, double endAnnInt, double incRate){
    double monthInt = 0;
    double monthsToPay = 0;
    double rowNumber = (((lastYears - firstYears))/incYears);
    double rowNumberWithInt = (rowNumber + 1);
    double colNumber = ((endMonthInt - startMonthInt)/monthIncRate);
    double colNumberWithTop = (colNumber+1);
    double currentYears = 0;
    double currentMonths = 0;
    double currentMonthInt = 0;
    double currentPayment = 0;
    double currentAnnInt = 0;
    double annuityAmt = 0;
   //counting columns
   for (double i = 0; i &lt;= colNumberWithTop; i++) {
      //printing the top column
      if (i == 0){
       System.out.printf("%-20s", "Interest Rate");  
       for (double k = 0; k &lt;= rowNumber; k++) {
           currentYears = (firstYears + (incYears * i));
           System.out.printf("%-20s", currentYears + " Years");
       }
       System.out.println(); 
      } else if (i &gt; 0) {
        //finding annual interest rate for printing, and monthly interest rate as a decimal for math
        currentAnnInt = (startAnnInt + (incRate * i));
        currentMonthInt = ((currentAnnInt/100)/12);
        System.out.printf("%-20.2f%%", currentAnnInt*100);
        for (double k = 0; k &lt;= rowNumber; k++) {
             monthsToPay = (firstMonths + (incMonths * i)); 
             annuityAmt = annuityCalc(currentMonthInt, monthsToPay);
             currentPayment = (loanAmt * annuityAmt);
             System.out.printf("%-20.2f", currentPayment);
        }
        System.out.println();
  
      }
  
      }
  
  
       }
  </code></pre>
  
  <p>The data I'm getting back is </p>
  
  <pre><code>Interest Rate                 15.0 Years          15.0 Years          15.0 Years          15.0 Years
                  4.25%         28235795.88         28235795.88         28235795.88         28235795.88
                  4.50%         26667168.53         26667168.53         26667168.53         26667168.53
                  4.75%         25263659.87         25263659.87         25263659.87         25263659.87
                  5.00%         24000502.07         24000502.07         24000502.07         24000502.07
                  5.25%         22857645.03         22857645.03         22857645.03         22857645.03
                  5.50%         21818684.11         21818684.11         21818684.11         21818684.11
                  5.75%         20870067.61         20870067.61         20870067.61         20870067.61
                  6.00%         20000502.50         20000502.50         20000502.50         20000502.50
                  6.25%         19200502.59         19200502.59         19200502.59         19200502.59
  &gt; 
  </code></pre>
  
  <p>Why on earth is it doing this? It seem to be printing the interest rate under the 30 Years column and shifting all the other columns left one, and printing the first interest rate at the end of the top column</p>
  
  <p>Expected output is </p>
  
  <pre><code>Interest Rate    15 Years   20 Years  25 Years  30 Years
  4.0000           739.69     605.98    527.84    477.42
  4.2500           752.28     619.23    541.74    491.94
  4.5000           764.99     632.65    555.83    506.69
  4.7500           777.83     646.22    570.12    521.65
  5.0000           790.79     659.96    584.59    536.82
  5.2500           803.88     673.84    599.25    552.20
  5.5000           817.08     687.89    614.09    567.79
  5.7500           830.41     702.08    629.11    583.57
  6.0000           843.86     716.43    644.30    599.55
  </code></pre>