diff --git a/src/main/java/Finance.java b/src/main/java/Finance.java new file mode 100644 index 00000000..f5487694 --- /dev/null +++ b/src/main/java/Finance.java @@ -0,0 +1,59 @@ +import java.util.Arrays; +import java.util.Map; + +import com.h2.SavingsCalculator; +import com.h2.MortgageCalculator; +import com.h2.BestLoanRates; + +public class Finance { + public final static String BEST_LOAN_RATES = "bestLoanRates"; + public final static String SAVINGS_CALCULATOR = "savingsCalculator"; + public final static String MORTGAGE_CALCULATOR = "mortgageCalculator"; + + public final static Map commandsToUsage = Map.of(BEST_LOAN_RATES, "usage: bestLoanRates", + SAVINGS_CALCULATOR, "usage: savingsCalculator ", + MORTGAGE_CALCULATOR, "usage: mortgageCalculator "); + + private static boolean validateCommandArguments(String[] args){ + switch(args[0]){ + case BEST_LOAN_RATES: + return args.length == 1; + case SAVINGS_CALCULATOR: + return args.length == 3; + case MORTGAGE_CALCULATOR: + return args.length == 4; + } + return false; + } + + private static void executeCommand(String command, String[] arguments){ + switch(command){ + case BEST_LOAN_RATES: + System.out.println("Finding best loan rates ..."); + BestLoanRates.main(arguments); + return; + case SAVINGS_CALCULATOR: + System.out.println("Finding your net savings ..."); + SavingsCalculator.main(arguments); + return; + case MORTGAGE_CALCULATOR: + System.out.println("Finding your monthly payment ..."); + MortgageCalculator.main(arguments); + return; + } + } + + public static void main(String[] args) { + String command = args[0]; + if (!commandsToUsage.containsKey(command)){ + System.out.println(command + ": command not found"); + return; + } + boolean isValidCommand = validateCommandArguments(args); + if (!isValidCommand) { + System.out.println(commandsToUsage.get(command)); + return; + } + executeCommand(command, Arrays.copyOfRange(args, 1, args.length)); + } +} diff --git a/src/main/java/com/h2/App.java b/src/main/java/com/h2/App.java index 011ff16b..3c6755d9 100644 --- a/src/main/java/com/h2/App.java +++ b/src/main/java/com/h2/App.java @@ -12,6 +12,14 @@ public static void main( String[] args ) } public static int doubleTheNumber(int number) { - return -1; + return number * 2; + } + + private static int add(int[] numbers){ + int sum = 0; + for (int i = 0; i < numbers.length; i++){ + sum += numbers[i]; + } + return sum; } } diff --git a/src/main/java/com/h2/BestLoanRates.java b/src/main/java/com/h2/BestLoanRates.java new file mode 100644 index 00000000..2a45f5eb --- /dev/null +++ b/src/main/java/com/h2/BestLoanRates.java @@ -0,0 +1,33 @@ +package com.h2; + +import java.util.Map; +import java.util.Scanner; + +public class BestLoanRates { + + public static final Map bestRates = Map.of(1, 5.50f, 2, 3.45f, 3, 2.67f); + + public static void main(String[] args){ + Scanner scanner = new Scanner(System.in); + System.out.println("Enter your name"); + String name = scanner.nextLine(); + System.out.println("Hello " + name); + System.out.println("Enter the loan term (in years)"); + int loanTermInYears = scanner.nextInt(); + float bestRate = getRates(loanTermInYears); + if (bestRate == 0.0f){ + System.out.println("No available rates for term: " + loanTermInYears + " years"); + } + else { + System.out.println("Best Available Rate: " + getRates(loanTermInYears) + "%"); + } + scanner.close(); + } + + public static float getRates(int loanTermInYears){ + if (bestRates.containsKey(loanTermInYears)){ + return bestRates.get(loanTermInYears); + } + return 0.0f; + } +} diff --git a/src/main/java/com/h2/MortgageCalculator.java b/src/main/java/com/h2/MortgageCalculator.java new file mode 100644 index 00000000..ee368609 --- /dev/null +++ b/src/main/java/com/h2/MortgageCalculator.java @@ -0,0 +1,50 @@ +package com.h2; + +import java.text.DecimalFormat; + +import com.h2.Utilities; + +public class MortgageCalculator { + private long loanAmount; + private int termInYears; + private float annualRate; + private double monthlyPayment; + + public MortgageCalculator(long loanAmount, int termInYears, float annualRate){ + this.loanAmount = loanAmount; + this.termInYears = termInYears; + this.annualRate = annualRate; + } + + private int getNumberOfPayments(){ + return 12 * termInYears; + } + + private float getMonthlyInterestRate(){ + float interestRate = annualRate/100; + return interestRate/12; + } + + public void calculateMonthlyPayment(){ + long P = loanAmount; + float r = getMonthlyInterestRate(); + int n = getNumberOfPayments(); + double M = P * (((r * Math.pow(1 + r, n)))/((Math.pow((1 + r), n)) - 1)); + this.monthlyPayment = M; + } + + public String toString(){ + DecimalFormat df = new DecimalFormat("####0.00"); + return "monthlyPayment: " + df.format(monthlyPayment) ; + } + + public static void main(String[] args) { + long loanAmount = Utilities.getLongValue(args[0]); + int termInYears = Utilities.getIntValue(args[1]); + float annualRate = Utilities.getFloatValue(args[2]); + + MortgageCalculator calculator = new MortgageCalculator(loanAmount, termInYears, annualRate); + calculator.calculateMonthlyPayment(); + System.out.println(calculator.toString()); + } +} diff --git a/src/main/java/com/h2/SavingsCalculator.java b/src/main/java/com/h2/SavingsCalculator.java new file mode 100644 index 00000000..b40b4613 --- /dev/null +++ b/src/main/java/com/h2/SavingsCalculator.java @@ -0,0 +1,59 @@ +package com.h2; + +import java.time.LocalDate; +import java.time.YearMonth; + +import com.h2.Utilities; + +public class SavingsCalculator { + private float[] credits; + private float[] debits; + + public SavingsCalculator(float[] credits, float[] debits){ + this.credits = credits; + this.debits = debits; + } + + private float sumOfCredits(){ + float sum = 0.0f; + for (int index = 0; index < credits.length; index++){ + sum += credits[index]; + } + return sum; + } + + private float sumOfDebits(){ + float sum = 0.0f; + for (int index = 0; index < debits.length; index++){ + sum += debits[index]; + } + return sum; + } + + private static int remainingDaysInMonth(LocalDate date){ + YearMonth yearMonth = YearMonth.of(date.getYear(), date.getMonth()); + int totalDaysInMonth = yearMonth.lengthOfMonth(); + int remainingDays = totalDaysInMonth - date.getDayOfMonth(); + return remainingDays; + } + + public float calculate(){ + return sumOfCredits() - sumOfDebits(); + } + + public static void main(String[] args){ + String[] creditsAsString = args[0].split(","); + String[] debitsAsString = args[1].split(","); + float[] credits = new float[creditsAsString.length]; + for (int i = 0; i< creditsAsString.length; i++){ + credits[i] = Utilities.getFloatValue(creditsAsString[i]); + } + float[] debits = new float[debitsAsString.length]; + for (int i = 0; i< debitsAsString.length; i++){ + debits[i] = Utilities.getFloatValue(debitsAsString[i]); + } + SavingsCalculator calculator = new SavingsCalculator(credits, debits); + float netSavings = calculator.calculate(); + System.out.println("Net Savings = " + netSavings + ", remaining days in month = " + remainingDaysInMonth(LocalDate.now())); + } +} diff --git a/src/main/java/com/h2/Utilities.java b/src/main/java/com/h2/Utilities.java new file mode 100644 index 00000000..238d2492 --- /dev/null +++ b/src/main/java/com/h2/Utilities.java @@ -0,0 +1,35 @@ +package com.h2; + +public class Utilities { + public static long getLongValue(String in){ + long out = Long.MIN_VALUE; + try{ + out = Long.parseLong(in); + } catch (NumberFormatException e){ + throw new IllegalArgumentException(in + " cannot be converted into a 'long' value. Exiting program."); + } + return out; + } + + public static int getIntValue(String in){ + int out = Integer.MIN_VALUE; + try { + out = Integer.parseInt(in); + } + catch (NumberFormatException e){ + throw new IllegalArgumentException(in + " cannot be converted into a 'int' value. Exiting program."); + } + return out; + } + + public static float getFloatValue(String in){ + float out = Float.MIN_VALUE; + try { + out = Float.parseFloat(in); + } + catch (NumberFormatException e) { + throw new IllegalArgumentException(in + " cannot be converted into a 'float' value. Exiting program."); + } + return out; + } +}