All pastes #734790 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-10-13 00:24 UTC
rendered paste body
//////////////////////////////////////////////////////////////////////////////////
// ICS 3M1 - Mrs. Shanks
// Patrick Paskaris
// October 2, 2007
// Selection Assignment 3
// 
// This program will calculate a $120 000 mortgage being paid off in $24 000 chunks
// at 10.75% interest per year, and output the previous outstanding balance, the
// year-end interest, the principal paid and the year-end outstanding balance.
//////////////////////////////////////////////////////////////////////////////////
// Variables Used:
// addedSpaces - String of spaces for alignment
// alignString - String of spaces & original string for alignment
// amountLeft - The outstanding amount
// COLUMN_MARGIN - Length of MARGIN
// COLUMN_WIDTH - Length of UNDERLINE_STR
// completionDecimal - Used to check for decimals
// completionLen - Length of the completion string
// DECIMAL - '.'
// FILE_NAME - Name of the input file
// HALF_MARGIN - Spaces for half-margin
// HEADER_COUNT - Number of headers
// HEADER1 - Title of column 1
// HEADER2 - Title of column 2
// HEADER3 - Title of column 3
// HEADER4 - Title of column 4
// HEADER5 - Title of column 5
// HEADER6 - Title of column 6
// interest - The interest on the outstanding amount
// INTEREST_RATE - Interest rate on mortgage
// INTEREST_STR - Output string for the interest rate
// MARGIN - Spaces for margin
// MORTGAGE_AMOUNT - Initial cost of mortgage
// outCompleted - The completed string
// outMortgageAmount - Output string for the initial cost of mortgage
// outZero - Output string for "0.00"
// overPaid - Difference of amountLeft and paid when amountLeft is less than paid
// paid - The amount paid each year on the outstanding amount
// PAY_AMOUNT - Amount paid each year
// ROUNDER - 100
// spacesDiff - Amount of spaces needed for alignment
// UNDERLINE_STR - Underline for headers
// underlineLine - Combined underlines
// year - Year counter
//////////////////////////////////////////////////////////////////////////////////

class Selections3
{
  
  public static void main( String args[] )
  {
    
    final double MORTGAGE_AMOUNT = 120000, PAY_AMOUNT = 24000,
      INTEREST_RATE = .1075;
    final String INTEREST_STR = ( INTEREST_RATE * 100 ) + "%";
    double amountLeft = MORTGAGE_AMOUNT, interest = 0, paid = 0, overPaid = 0;
    int year = 0;
    String outZero = "$ 0.00", outMortgageAmount = "";
    
    // For table output
    final String UNDERLINE_STR = "____________________", MARGIN = "    ",
      HALF_MARGIN = "  ";
    final String HEADER1 = "Year", HEADER2 = "Previous Outstanding",
      HEADER3 = "Interest", HEADER4 = "Principal", HEADER5 = "Outstanding";
    final int HEADER_COUNT = 5;
    final int COLUMN_MARGIN = MARGIN.length( ),
      COLUMN_WIDTH = UNDERLINE_STR.length( );
    String underlineLine = "";
    int spacesDiff = 0;
    String addedSpaces = "", alignString = "";
    
    // Code for .00 completion
    final int ROUNDER = 100;
    final char DECIMAL = '.';
    final int DECIMAL_POS = 2;
    char completionDecimal = '.';
    int completionLen = 0;
    String outCompleted = "";
    
    // Header 1
    alignString = HEADER1;
    // Layout is key with a table, so this code determines the
    // proper amount of spaces to insert before the text and
    // after it to ensure everything lines up.
    spacesDiff = ((COLUMN_WIDTH + COLUMN_MARGIN) / 2) -
      (alignString.length() / 2);
    addedSpaces = "";
    for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
    {
      addedSpaces += " ";
    }
    alignString = addedSpaces + alignString;
    System.out.print( alignString );
    spacesDiff = ( COLUMN_WIDTH + COLUMN_MARGIN ) - alignString.length( );
    addedSpaces = "";
    for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
    {
      addedSpaces += " ";
    }
    alignString = addedSpaces;
    System.out.print( alignString );
    
    // Header 2
    alignString = HEADER2;
    // Code for centering
    spacesDiff = ((COLUMN_WIDTH + COLUMN_MARGIN) / 2) -
      (alignString.length() / 2);
    addedSpaces = "";
    for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
    {
      addedSpaces += " ";
    }
    alignString = addedSpaces + alignString;
    System.out.print( alignString );
    spacesDiff = ( COLUMN_WIDTH + COLUMN_MARGIN ) - alignString.length( );
    addedSpaces = "";
    for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
    {
      addedSpaces += " ";
    }
    alignString = addedSpaces;
    System.out.print( alignString );
    
    // Header 3
    alignString = HEADER3;
    // Code for centering
    spacesDiff = ((COLUMN_WIDTH + COLUMN_MARGIN) / 2) -
      (alignString.length() / 2);
    addedSpaces = "";
    for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
    {
      addedSpaces += " ";
    }
    alignString = addedSpaces + alignString;
    System.out.print( alignString );
    spacesDiff = ( COLUMN_WIDTH + COLUMN_MARGIN ) - alignString.length( ) - 2;
    addedSpaces = "";
    for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
    {
      addedSpaces += " ";
    }
    alignString = addedSpaces;
    System.out.print( alignString );
    
    // Header 4
    alignString = HEADER4;
    // Code for centering
    spacesDiff = ((COLUMN_WIDTH + COLUMN_MARGIN) / 2) -
      (alignString.length() / 2);
    addedSpaces = "";
    for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
    {
      addedSpaces += " ";
    }
    alignString = addedSpaces + alignString;
    System.out.print( alignString );
    spacesDiff = ( COLUMN_WIDTH + COLUMN_MARGIN ) - alignString.length( );
    addedSpaces = "";
    for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
    {
      addedSpaces += " ";
    }
    alignString = addedSpaces;
    System.out.print( alignString );
    
    // Header 4
    alignString = HEADER5;
    // Code for centering
    spacesDiff = ((COLUMN_WIDTH + COLUMN_MARGIN) / 2) -
      (alignString.length() / 2);
    addedSpaces = "";
    for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
    {
      addedSpaces += " ";
    }
    alignString = addedSpaces + alignString;
    System.out.print( alignString );
    spacesDiff = ( COLUMN_WIDTH + COLUMN_MARGIN ) - alignString.length( );
    addedSpaces = "";
    for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
    {
      addedSpaces += " ";
    }
    alignString = addedSpaces;
    System.out.print( alignString );
    
    System.out.print( "\n" );
    
    // Dynamic underlining based on number of columns
    for ( int underline = 0; underline < HEADER_COUNT; underline++ )
    {
      underlineLine += MARGIN + UNDERLINE_STR;
    }
    System.out.println( underlineLine );
    
    while ( amountLeft > 0 )
    {      
      
      // Increase the year
      year++;
      
      // Year is centered
      alignString = year + "";
      spacesDiff = ((COLUMN_WIDTH + COLUMN_MARGIN) / 2) -
        (alignString.length() / 2);
      addedSpaces = "";
      for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
      {
        addedSpaces += " ";
      }
      alignString = addedSpaces + alignString;
      System.out.print( alignString );
      spacesDiff = (COLUMN_WIDTH + COLUMN_MARGIN) - alignString.length() +
        HALF_MARGIN.length();
      addedSpaces = "";
      for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
      {
        addedSpaces += " ";
      }
      alignString = addedSpaces;
      System.out.print( alignString );
      
      // Previous Outstanding is right-aligned and .00 completed
      // .00 completion is the method of adding the final 0 on numbers
      // which do not have them.  Checking the second last character
      // in the string will determine if a 0 has to be added.
      outCompleted = "$ " + amountLeft + "";
      completionLen = outCompleted.length( );
      completionDecimal = outCompleted.charAt( completionLen - DECIMAL_POS );
      if ( completionDecimal == '.' )
      {
        outCompleted += "0";
      }
      alignString = outCompleted;
      spacesDiff = ( COLUMN_WIDTH ) - alignString.length( );
      addedSpaces = "";
      for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
      {
        addedSpaces += " ";
      }
      alignString = addedSpaces + alignString;
      System.out.print( alignString );
      spacesDiff = (COLUMN_WIDTH + (COLUMN_MARGIN / 2)) -
        alignString.length() + 1;
      addedSpaces = "";
      for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
      {
        addedSpaces += " ";
      }
      alignString = addedSpaces;
      System.out.print( alignString );
      
      
      // Calculate the interest, oustanding and amount paid
      interest = amountLeft * INTEREST_RATE;
      paid = PAY_AMOUNT - interest;
      if ( paid < 0 ) {
        amountLeft += -paid;
        paid = 0;
      }
      amountLeft -= paid;
      
      // Round the interest, oustanding and amount paid
      interest = Math.round( interest * ROUNDER );
      interest /= ROUNDER;
      amountLeft = Math.round( amountLeft * ROUNDER );
      amountLeft /= ROUNDER;
      paid = Math.round( paid * ROUNDER );
      paid /= ROUNDER;
      
      // Interest is right-aligned and .00 completed
      outCompleted = "$ " + interest + "";
      completionLen = outCompleted.length( );
      completionDecimal = outCompleted.charAt( completionLen - DECIMAL_POS );
      if ( completionDecimal == '.' )
      {
        outCompleted += "0";
      }
      alignString = outCompleted;
      spacesDiff = ( COLUMN_WIDTH ) - alignString.length( );
      addedSpaces = "";
      for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
      {
        addedSpaces += " ";
      }
      alignString = addedSpaces + alignString;
      System.out.print( alignString );
      spacesDiff = (COLUMN_WIDTH + (COLUMN_MARGIN / 2)) -
        alignString.length() + 1;
      addedSpaces = "";
      for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
      {
        addedSpaces += " ";
      }
      alignString = addedSpaces;
      System.out.print( alignString );
      
      if ( amountLeft > 0 )
      {
        
        // PayAmount and AmountLeft are right-aligned and .00 completed
        outCompleted = "$ " + paid + "";
        completionLen = outCompleted.length( );
        completionDecimal = outCompleted.charAt( completionLen - DECIMAL_POS );
        if ( completionDecimal == '.' )
        {
          outCompleted += "0";
        }
        alignString = outCompleted;
        spacesDiff = ( COLUMN_WIDTH ) - alignString.length( );
        addedSpaces = "";
        for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
        {
          addedSpaces += " ";
        }
        alignString = addedSpaces + alignString;
        System.out.print( alignString );
        spacesDiff = (COLUMN_WIDTH + (COLUMN_MARGIN / 2)) -
          alignString.length() + 1;
        addedSpaces = "";
        for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
        {
          addedSpaces += " ";
        }
        alignString = addedSpaces;
        System.out.print( alignString );
        
        outCompleted = "$ " + amountLeft + "";
        completionLen = outCompleted.length( );
        completionDecimal = outCompleted.charAt( completionLen - DECIMAL_POS );
        if ( completionDecimal == '.' )
        {
          outCompleted += "0";
        }
        alignString = outCompleted;
        spacesDiff = ( COLUMN_WIDTH ) - alignString.length( );
        addedSpaces = "";
        for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
        {
          addedSpaces += " ";
        }
        alignString = addedSpaces + alignString;
        System.out.print( alignString );
        spacesDiff = (COLUMN_WIDTH + (COLUMN_MARGIN / 2)) -
          alignString.length() + 1;
        addedSpaces = "";
        for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
        {
          addedSpaces += " ";
        }
        alignString = addedSpaces;
        System.out.print( alignString );
        
      }
      else
      {
        
        overPaid = PAY_AMOUNT + amountLeft;
        outCompleted = "$ " + overPaid + "";
        completionLen = outCompleted.length( );
        completionDecimal = outCompleted.charAt( completionLen - DECIMAL_POS );
        if ( completionDecimal == '.' )
        {
          outCompleted += "0";
        }
        
        // OverPaid and no value are right-aligned and .00 completed
        alignString = outCompleted;
        spacesDiff = ( COLUMN_WIDTH ) - alignString.length( );
        addedSpaces = "";
        for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
        {
          addedSpaces += " ";
        }
        alignString = addedSpaces + alignString;
        System.out.print( alignString );
        spacesDiff = (COLUMN_WIDTH + (COLUMN_MARGIN / 2)) -
          alignString.length() + 1;
        addedSpaces = "";
        for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
        {
          addedSpaces += " ";
        }
        alignString = addedSpaces;
        System.out.print( alignString );
        
        alignString = outZero;
        spacesDiff = ( COLUMN_WIDTH ) - alignString.length( );
        addedSpaces = "";
        for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
        {
          addedSpaces += " ";
        }
        alignString = addedSpaces + alignString;
        System.out.print( alignString );
        spacesDiff = (COLUMN_WIDTH + (COLUMN_MARGIN / 2)) -
          alignString.length() + 1;
        addedSpaces = "";
        for ( int spaceAdd = 0; spaceAdd <= spacesDiff; spaceAdd++ )
        {
          addedSpaces += " ";
        }
        alignString = addedSpaces;
        System.out.print( alignString );
        
      }
      
      System.out.print( "\n" );
      
    }
    
    // .00 completion for mortgage amount and pay amount.
    outCompleted = "$ " + MORTGAGE_AMOUNT + "";
    completionLen = outCompleted.length( );
    completionDecimal = outCompleted.charAt( completionLen - DECIMAL_POS );
    if ( completionDecimal == '.' )
    {
      outCompleted += "0";
    }
    outMortgageAmount = outCompleted;
    
    outCompleted = "$ " + PAY_AMOUNT + "";
    completionLen = outCompleted.length( );
    completionDecimal = outCompleted.charAt( completionLen - DECIMAL_POS );
    if ( completionDecimal == '.' )
    {
      outCompleted += "0";
    }
    
    System.out.println( "\n\nMortage of " + outMortgageAmount + " at " +
                       INTEREST_STR + " interest was paid in chunks of " +
                       outCompleted + " over the course of " + year +
                       " years." );
    
  }
  
}