嵌套for循环计算的问题

时间:2014-09-21 00:39:03

标签: java for-loop nested-loops calculated-columns

所以我是java的一个(主要)新手,我正在编写一个简单的程序,打印出每月贷款支付表。我已经将格式化了,但嵌套的for循环计算正在我的脑海中。我需要能够扣除每月50美元的付款,并计算出我从用户首次贷款1000美元时提出的利率。

到目前为止,我尝试过的所有内容都会导致无限循环,或者在所有12个月内打印出第一个平衡计算。

这可能是一个非常明显的问题,但任何反馈都会非常感激! For循环对我来说不是很直观,并且盯着这段相同的代码阻止了我的进步!

( ..... )


//this method prompts the user to enter the annual interest rate and then prints it 
//along with the initial loan, monthly payment, and a simple loan payment table for 
//one year

private static void simpleLoanPaymentTable() {
  Scanner CONSOLE = new Scanner(System.in);
  double annualInterestRate;
  double initialLoan = 1000.0;
  double monthlyPayment = 50.0;

  System.out.println("Please enter the annual interest rate:");
  annualInterestRate = CONSOLE.nextDouble();
  double percentAnnualRate = (annualInterestRate/100);
  double percentMonthlyRate = (percentAnnualRate/12);
  System.out.println();
  System.out.println("The initial loan is $1000.0");
  System.out.println("The monthly payment is $50.0");
  System.out.println("The annual interest rate is " + annualInterestRate + "%");
  System.out.println();


  System.out.println("Simple Loan Payment Table For One Year");
  System.out.println();
  System.out.println(" Month  Balance");


  //create 12 rows for the months
  for(int row = 1; row <= 12; row++) { 
    //calculate monthly balance 
    for(double i = 0; i <= initialLoan; i++) {
      i = (initialLoan-monthlyPayment+(initialLoan*percentMonthlyRate));
      System.out.println(" " + row + "      " + i);
    }
  }
  System.out.println();
}

2 个答案:

答案 0 :(得分:0)

你认为这是做什么的?

for(double i = 0; i <= initialLoan; i++) {
  i = (initialLoan-monthlyPayment+(initialLoan*percentMonthlyRate));
  System.out.println(" " + row + "      " + i);
}

实际上正在进行的是您一遍又一遍地为i分配相同的值。

用铅笔和纸坐下来,手工计算贷款。然后将您经历的过程转换为代码。

提示:基于我认为您应该做的事情,内部循环不应该是for循环。

答案 1 :(得分:0)

不要更改for循环内部的循环迭代器。它已经在循环顶部的每次迭代中被更改;你需要在循环中做的是使用这些迭代器。

所以在你的情况下,你说

for(int row = 1; row <= 12; row++) {

表示从row = 1开始,每次迭代都增加1,直到你不再小于或等于12.然后你说

for(double i = 0; i <= initialLoan; i++) {

表示从i = 0开始,每次迭代增加1,直到你的初始贷款小于或等于。请注意,某些东西还没有加起来:你的迭代器我不应该增加1,直到你得到初始贷款,(我相信)它应该迭代1,直到你计算的贷款到达初始贷款。

然后在nexted循环中,使用这两个迭代器(但不要更改它们)来计算当前在行/列中的贷款。

这将解决您的无限循环问题(除非数学仍然不正确),但仍可能不是您正在寻找的答案。问问自己,你的行是什么&#34;在这个表中应该代表什么?这个表中的列应该代表什么?然后弄清楚如何在任何给定的迭代中计算表中使用(但不更改)行值(月)和列值(i)的数字。

编辑:再一次,我可能会错误地处理数学,但我自己搞砸了,并意识到你的表中实际上没有任何列:它只有行(==月)。因此,您只需要一个循环来迭代几个月,其余的只是一个计算来弄清楚。看看这个,看看这是否是您正在寻找的:

double currentLoan = initialLoan;
for(int row = 1; row <= 12; row++) {
    //calculate monthly balance
    currentLoan = (currentLoan-monthlyPayment)*(1+percentMonthlyRate);
    System.out.println(" " + row + "\t" + currentLoan);
}