2015-04-11 6 views
0

Я показываю снижающийся остаток кредита в год и проценты, выплачиваемые в год. Первый и второй год всегда перепутаны, в результате чего оставшиеся годы не будут правильными. Кроме того, как мне печатать столбец с обозначенным пространством для каждой записи, кроме пробелов, чтобы отделить их, как я?Снижение остатков на счетах

Мой код:

int year; 
periods = loanDurationYears*12; 
double annualBalance = 0; 
double annualInterest = 0; 
int month = loanDurationYears-(loanDurationYears-1); 

      balance = loanAmount; 
      double interestForMonth = balance*((interestRate*.01)/12); 
      double principalForMonth = monthlyPayment - interestForMonth; 
      balance = balance - principalForMonth; 
      System.out.println("Annual balances"); 
      System.out.printf("%s %s %s \n","Year","Interest","Balance"); 

      for(int j=0;j<periods;j++) 
      { 
       month++; 
       year = month/12; 

       interestForMonth = balance*((interestRate*.01)/12); 
       principalForMonth = monthlyPayment - interestForMonth; 
       balance = balance - principalForMonth; 
       annualBalance = annualBalance + balance; 
       annualInterest = annualInterest + interestForMonth; 

       if(month%12 == 0) 
       { 
        System.out.printf("%d  %.2f %.2f \n",year,annualInterest,annualBalance); 
        annualBalance = 0; 
        annualInterest = 0; 
       } 


      } 

Мой выход:

Year Interest Balance 
1  4852.43 859718.74 
2  5080.12 899718.26 
3  4842.34 857208.50 
4  4588.01 811738.89 
5  4315.96 763103.31 
6  4024.98 711081.35 
7  3713.73 655437.20 
8  3380.81 595918.66 
9  3024.71 532255.97 
10  2643.82 464160.58 
11  2236.40 391323.84 
12  1800.62 313415.64 
13  1334.49 230082.85 
14  835.91 140947.76 
15  302.62 45606.39 

Как результат должен выглядеть: (кроме столбцов не выровненных)

Year Interest Loan Balance 
1 5965.23   86408.21 
    2 5715.14  82566.33  
    3 5447.64  78456.94  
    4 5161.51  74061.43  
    5 4855.46  69359.87  
6 4528.10  64330.94  
    7 4177.95  58951.87  
    8 3803.41  53198.26  
    9 3402.80  47044.03  
    10 2974.29  40461.31  
    11 2515.95 33420.24  
    12  2025.70 25888.91  
    13 1501.31 17833.19  
    14 940.40 9216.58  
    15  340.45 -0.00 
+0

Для расстояния, вы могли бы начать пытаться '\ T' (закладка) вместо нескольких пробелов. Чтобы получить надежную линию, вам придется выполнять более сложные вычисления, хотя длина каждого номера будет потенциально отличаться. –

ответ

0

Вы получаете неправильный начальная сумма, потому что вы настраиваете баланс перед циклом. Похоже, ваш for-loop рассчитывает начать с полного баланса, но он уже уменьшен. Вы также должны либо переместить приращение month в конец цикла, либо начать его с нуля вместо 1.

Эта строка всегда будет инициализировать month до 1. Зачем беспокоиться по математике?

int month = loanDurationYears-(loanDurationYears-1); 
0

Я не тестировал это или что-то еще, но он должен работать. Я уверен, что это не лучшее исправление, но что-то простое, как это должно работать нормально.

Он просто проверяет размер переменной и затем использует разные операторы печати в зависимости от ее размера. Кроме того, как год скидывает выравнивание я поставил код, который должен исправить что

if(month%12 == 0) 
{ 
    // Set the amount of decimals for all interest rates 
    DecimalFormat df = new DecimalFormat("#.##"); 
    df.format(annualInterest); 

    // Get the length of annualInterest 
    int n = math.floor(annualInterest); 
    int length = (int)(Math.log10(n)+1); 

    if (length = 3) 
    { 
     // Have 1 less space than normal on the print statement 
     // Maybe also do a check on the year also as that throws it out when it goes past 10 
     if (year > 10) 
      System.out.printf("%d  %.2f %.2f \n",year,annualInterest,annualBalance); 
     else 
      System.out.printf("%d  %.2f %.2f \n",year,annualInterest,annualBalance); 

    } 
    if (length = 2) 
    { 
     // Have 2 less spaces than normal 
    } 

    annualBalance = 0; 
    annualInterest = 0; 
    }