I made a code to calculate the monthly mortgage payment. Here is part of my code->
public static void printAmortizationSchedule(double principal, double annualInterestRate,
int numYears) {
double interestPaid, principalPaid, newBalance;
double monthlyInterestRate, monthlyPayment;
int month;
int numMonths = numYears * 12;
monthlyInterestRate = annualInterestRate / 12;
monthlyPayment = monthlyPayment(principal, monthlyInterestRate, numYears);
System.out.format("Your monthly Payment is: %8.2f%n", monthlyPayment);
for (month = 1; month <= numMonths; month++) {
// Compute amount paid and new balance for each payment period
interestPaid = principal * (monthlyInterestRate / 100);
principalPaid = monthlyPayment - interestPaid;
newBalance = principal - principalPaid;
// Update the balance
principal = newBalance;
}
}
static double monthlyPayment(double loanAmount, double monthlyInterestRate, int numberOfYears) {
monthlyInterestRate /= 100;
return loanAmount * monthlyInterestRate /
( 1 - 1 / Math.pow(1 + monthlyInterestRate, numberOfYears * 12) );
}
now, I need to add code that
1.The principal amount must be a non-negative number.
The mortgage payment will be determined by one of these amounts:
• 1 year 3.5%
• 2 year 3.9%
• 3 year 4.4%
• 5 year 5.0%
• 10 year 6.0%
I think I need to use do while statement, or if else code. However, I'm struggling to find where to put. Please help me!
In both cases you're dealing with a condition:
if the principal amount is negative, then don't perform the calculation, otherwise, proceed with the calculation.
if the mortgage is for n years then use r rate.
Hence, you'd use the if-then-else construct.
For the principle amount, check it early; It doesn't make sense to perform computations only to throw it all away because they are invalid. You can throw an exception to indicate the invalid input, a negative principal.
For the rate you just need to make sure you select the right one (with if-then-else) before you use it.
Related
im calling a function to help work out a second calculation but it complies but dosnt return correct answer
tired a few different things but breaks codes so more then likely completely wrong
9. This question involves writing two functions.
a. The interest on a loan is currently 2.4% (0.024). If you take a £9000
loan to day you will pay 9000 * 0.024 ( £216) for a year. Start by writing a
function called calculateInterest which takes the loanAmount
(which can be any number not just 9000) as a float and a second argument
interestRate (also float can be any faction) which is the interest rate
for the loan. It should return a float which is the Interest (£216 in the
example above).
b. When calculateInterest works write a function called HW2I. (I=capital i)
This takes 2 float arguments. The original loan amount (float) and years
(an int) which is the number of years the loan will operate over (say 35).
Each year the interest is calculated (via a call to the calculateInterest
function). Interest is then added to the loan amount. This value (loan+
interest) is the new loan amount. Write the function HW2I. Don’t forget to
test it yourself to make sure it works correctly. Here is the pseudo code.
To HW2I ( loan, intreastRate , years )
Repeat with year = 1 to years
adjustedLoan = loan + calculateInterest( loan , intreastRate )
loan = adjustedLoan
end repeat
return loan
public float calculateInterest(float loanAmount, float interestRate) {
float intrest;
intrest = loanAmount * interestRate;
return intrest;
}
public float HW2I(float loan, int years) {
for (int i = 0; i <= years; i = i++) {
loan = loan + calculateInterest(9000, 0.24);
}
return (loan);
}
I guess we go to the same university because I have the exact same question so here's the answer:
public float calculateInterest(float loanAmount, float interestRate) {
float interest = (loanAmount * interestRate);
{
return interest;
}
}
public float HW2I(float loanAmount, float interestRate, int years) {
for (int i = 0; i < years; i++) {
float newLoanAmount = loanAmount + calculateInterest(loanAmount, interestRate);
loanAmount = newLoanAmount;
}
return loanAmount;
}
Good luck!
For the explanation:
The first method only asks us to calculate the interest, which is done by multiplying the loanAmount and the interestRate together. After, we return the interest.
For the second function, the pseudo code shows us that we need 3 arguments, which are float loanAmount, float interestRate and int years. It also says "Repeat with year= 1 to years" meaning we need to use iteration, so we do the for(int i= 0; i< years; i++ part. If we look back at the question we need a newLoanAmount which is the first loanAmount + a call to the first method, which is calculateInterest(loanAmount, interestRate). Now the loanAmount becomes the newLoanAmount, kind of replacing the value of the loanAmount before. Because the value has changed, we need to return loanAmount.
I hope this helps further and apologises if it isn't a great explanation; I started learning Java 2 months ago.
I'm trying to write a recursive method that takes 3 parameters (a loan amount, an interest rate, and a monthly payment). The interest is compounded monthly. The goal is to find out how many months it will take to pay off the loan completely. Here is the code I have so far:
public static double loanLength(double loan, double interest, double payment) {
if (payment > loan + loan * interest) {
return 0;
} else {
double completeLoan = loan + (loan * interest);
double stillOwe = completeLoan - payment;
if (stillOwe <= 0) {
return 1;
} else {
return 1 + (loanLength(stillOwe, interest, payment));
}
}
Examples of EXPECTED returns include:
loanLength(1000, 0.10, 200) is paid off in 6 months
loanLength(0, 0.90, 50) is 0 months
But my returns look like:
loanLength(1000, 0.10, 200): 7 months
loanLength(0, 0.90, 50): 0 months
My second test works fine, but my first one is just 1 integer above what it should be. I cannot figure out why. Any help is appreciated.
public static int loanLength(double loan, double interestAPR, double payment) {
if (loan <= 0) {
return 0;
}
double monthlyInterest = interestAPR / (12 * 100);
double compounded = loan * (1 + monthlyInterest);
return 1 + loanLength(compounded - payment, interestAPR, payment);
}
public static void main(String[] args) {
System.out.println(loanLength(0, 0.90, 50)); // 0
System.out.println(loanLength(1000, 10.0, 200)); // 6
System.out.println(loanLength(1000, 0.1, 200)); // 6 (FWIW)
}
Please note that interest APR is expressed as is, i.e. a $10,000 loan at 10% APR and $500 monthly payments is calculated as
loanLength(10000, 10.0, 500);
If 0.10 = 10% APR, then change this line
double monthlyInterest = interestAPR / 12;
I am currently trying to develop a compound interest calculator that includes monthly contributions. I have successfully been able to get the compound interest calculation working without the monthly contributions using the following line of code, but cannot figure out what the formula should be when adding monthly contributions.
double calculatedValue = (principalValue * Math.pow(1 + (interestRateValue/numberOfCompoundsValue), (termValue * numberOfCompoundsValue)));
When trying to get the calculated value with contributions I changed the way this is done. See the following code how I approached this.
//The starting principal
double principalValue = 5000;
//Interest rate (%)
double interestRateValue = 0.05;
//How many times a year to add interest
int numberOfCompoundsValue = 4;
//The number of years used for the calculation
double termValue = 30;
//The monthly contribution amount
double monthlyContributionsValue = 400;
//How often interest is added. E.g. Every 3 months if adding interest 4 times in a year
int interestAddedEveryXMonths = 12/numberOfCompoundsValue;
//The total number of months for the calculation
int totalNumberOfMonths = (int)(12 * termValue);
for(int i = 1; i <= totalNumberOfMonths; i++)
{
principalValue += monthlyContributionsValue;
if(i % interestAddedEveryXMonths == 0)
{
principalValue += (principalValue * interestRateValue);
}
}
I figured this should do what I am after. Every month increase the principal by the contribution amount and if that month equals a month where interest should be added then calculate the interest * the interest rate and add that to the principal.
When using the values above I expect the answer $355,242.18 but get $10511941.97, which looks better in my bank account but not in my calculation.
If anyone can offer me some help or point out where I have gone wrong that would be much appreciated.
Thanks in advance
Your problem is here:
principalValue += (principalValue * interestRateValue);
You're adding a full year's interest every quarter, when you should be adding just a quarter's interest. You need to scale that interest rate down to get the right rate.
Here's an example:
class CashFlow {
private final double initialDeposit;
private final double rate;
private final int years;
private final double monthlyContribution;
private final int interestFrequency;
CashFlow(double initialDeposit, double rate, int years,
double monthlyContribution, int interestFrequency) {
if ( years < 1 ) {
throw new IllegalArgumentException("years must be at least 1");
}
if ( rate <= 0 ) {
throw new IllegalArgumentException("rate must be positive");
}
if ( 12 % interestFrequency != 0 ) {
throw new IllegalArgumentException("frequency must divide 12");
}
this.initialDeposit = initialDeposit;
this.rate = rate;
this.years = years;
this.monthlyContribution = monthlyContribution;
this.interestFrequency = interestFrequency;
}
public double terminalValue() {
final int interestPeriod = 12 / interestFrequency;
final double pRate = Math.pow(1 + rate, 1.0 / interestPeriod) - 1;
double value = initialDeposit;
for ( int i = 0; i < years * 12; ++i ) {
value += monthlyContribution;
if ( i % interestFrequency == interestFrequency - 1 ) {
value *= 1 + pRate;
}
}
return value;
}
}
class CompoundCalc {
public static void main(String[] args) {
CashFlow cf = new CashFlow(5000, 0.05, 30, 400, 3);
System.out.println("Terminal value: " + cf.terminalValue());
}
}
with output:
run:
Terminal value: 350421.2302849443
BUILD SUCCESSFUL (total time: 0 seconds)
which is close to the $355k value you found.
There are a number of different conventions you could use to get the quarterly rate. Dividing the annual rate by 4 is a simple and practical one, but the pow(1 + rate, 1 / 4) - 1 method above is more theoretically sound, since it's mathematically equivalent to the corresponding annual rate.
After some brief testing I've come to the conclusion that either you have:
miscalculated the value you want ($355,242.18)
OR
incorrectly asked your question
The calculation you've described that you want ($5000 start + $400 monthly contributions for 30 years + interest every 3 months) is found by the code you've provided. The value that it gives ($10,511,941.97) is indeed correct from what I can see. The only other suggestions I can offer are to only use double if you need to (for example termValue can be an int) AND when ever you know the value is not going to change (for example interestRateValue) use final. It will help avoid any unforeseen error in larger programs. I hope this helps you figure out your interest calculator or answers any questions you have.
static void Main(string[] args)
{
double monthlyDeposit;
double rateOfInterest;
double numberOfCompounds;
double years;
double futureValue = 0;
double totalAmount = 0;
Console.WriteLine("Compound Interest Calculation based on monthly deposits");
Console.WriteLine("Monthly Deposit");
monthlyDeposit = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Rate Of Interest");
rateOfInterest = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Number of Compounds in a year");
numberOfCompounds = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Number of year");
years = Convert.ToDouble(Console.ReadLine());
futureValue = monthlyDeposit;
for (int i = 1; i <= years * 12; i++)
{
totalAmount = futureValue * (1 + (rateOfInterest / 100) / 12);
if (i == years * 12)
futureValue = totalAmount;
else
futureValue = totalAmount + monthlyDeposit;
}
Console.WriteLine("Future Value is=" + futureValue);
Console.ReadLine();
}
//Output
Compound Interest Calculation based on monthly Deposits
Monthly Deposit
1500
Rate Of Interest
7.5
Number of Compounds in a year
12
Number of year
1
Future Value is=18748.2726237313
I am a tasked to create a program that runs as described, programmed in Java:
Illustrate the growth of money in a savings account. The user enters the initial amount (as a decimal) and the interest rate which are used to calculate the number of years until the money doubles and the number of years until the money reaches a million dollars. (you will need to use more than 1 loop).
Note: The balance at the end of each year is
(1 + r) * balance
where balance is the previous balance, and r is the annual rate of interest in decimal form.
However, I cannot find the error in my code. What happens is that it continuously writes "Your balance will double in " and then the number infinitely grows.
Here is the code:
Scanner input = new Scanner(System.in);
double years = 0;
double futureVaule;
System.out.print("Please enter the amount of money you would like to deposit, as a decimal:\n>>");
double balance = input.nextDouble();
System.out.print("Please enter the interest rate of your deposit, as a percent:\n>>");
double r = input.nextDouble();
do
{
futureValue = (1 + r) * balance;
years = years + 1;
System.out.println("Your balance will double in "
+ Math.round(years) + " year(s).");
}while(futureValue <= balance*2);
This should work
futureValue = balance;
double doubleBalance = balance*2;
while(futureValue <= doubleBalance)
{
futureValue += futureValue * (( 1 + r)/100);
years++;
}
System.out.println("Your balance will double in "
+ years + " year(s).");
I have a task here: Define a class PayPerView with method moviefee() that calculates the monthly charges for movies rented. The method should take one argument representing number of movies rented and return the fee as a double.
The rental fee fee is $6.99 per movie. Preferred customers that rent more than 10 per month get a discount of 5%.
Here's my code so far:
public class PayPerView {
public static void main(String [] args){
}
public static double moviefee(int n){
double fee = 6.99;
double total= n*fee;
System.out.println("Your balance due this month is" + total);
//return 6.99*n * ((n>10) ? 0.95:1);
}}
I know it's awful, I'm sorry and you can ignore that last line of code I commented out because I'm going to redo it and turn it into an if statement. I thought maybe I should use an array, but I can't right? Because I don't know how many movies are/will be rented? Should I use an arraylist for the number of movies rented?
Actually that line you commented out looks pretty much exactly what you are trying to do anyway. Is there something particularly wrong with it?
If you really need to output the result on the console...
final double fee = 6.99;
double total = n * fee * (n > 10 ? .95 : 1.0);
System.out.println("Your balance due this month is" + total);
return total;
I don't see why you'd use an ArrayList if you don't have any data to put into it.
You'd probably want to try something along these lines:
double total = n * fee;
if (n > 10) {
total *= 0.95;
}
I also see that you wanted to use the ternary operator, so you could replace the above code block with
double total = n * fee * (n > 10 ? 0.95 : 1.0);
Your on the right track
public static double moviefee(int n){
double fee = 6.99;
double total;
if(n <= 10){
total= n*fee;
}
else{
total= n*fee - (n*fee*0.05); //5 percent discount
}
System.out.println("Your balance due this month is" + total);
return total;
}
Edit: added double total;