Хорошая организация классов для программы, которая завершается или перезапускается пользователем - PullRequest
0 голосов
/ 31 января 2019

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

import java.util.Scanner;

public class loanCalculator implements Comparable<loanCalculator> {

  //class variables 
  double term, rate, amount, monthlyPayment, perRate, totalRepaid, 
  totalPrincipalRepaid, totalInterestRepaid, totalInterestPercentage; 

  final double MONTHS_IN_YEAR = 12; 

  Scanner scan = new Scanner(System.in);

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    loanCalculator loan = new loanCalculator(); 
    loan.getTerm(); 
    loan.getRate(); 
    loan.getAmount();
    loan.setPeriodicInterestRate();
    loan.setMonthlyPayment();
    loan.setTotalRepaid();
    loan.setTotalPrincipalRepaid();
    loan.setTotalInterestRepaid();
    loan.setTotalInterestPercentage();
    System.out.println(loan.toString()); 

  }

  void getTerm() { 
    System.out.println("Enter the term of the loan in years");
    this.term = scan.nextDouble(); 
  }

  void getRate() { 
    System.out.println("Enter the rate");
    this.rate = scan.nextDouble(); 
  }

  void getAmount() { 
    System.out.println("Enter the amount (no commas or dollar signs");
    this.amount = scan.nextDouble(); 
  }

  void setPeriodicInterestRate() { 
    this.perRate = this.rate / 12 /100; 
  }

  void setMonthlyPayment() { 
    double N = -term*MONTHS_IN_YEAR;
    this.monthlyPayment = (perRate * amount) / (1-(Math.pow((1+perRate), N)));
  }

  void setTotalRepaid() { 
    this.totalRepaid = term * MONTHS_IN_YEAR * (monthlyPayment);
  }

  void setTotalPrincipalRepaid() { 
    this.totalPrincipalRepaid = amount; 
  }

  void setTotalInterestRepaid() { 
    this.totalInterestRepaid = totalRepaid - totalPrincipalRepaid; 
  }

  void setTotalInterestPercentage() { 
    totalInterestPercentage = totalInterestRepaid/amount; 
  }

  @Override
  public String toString() { 
    return "Amount: " + amount + "\n" + "Term: " + term + "\n" + "Rate: " + rate + 
            "\n" + "Monthly Payment: " + monthlyPayment + "\n" + "Total Repaid: " + totalRepaid + 
            "\n" + "Total Int Repaid: " + totalInterestRepaid + "\n" + "Total Int Percentage: " + 
            totalInterestPercentage; 
  }

  @Override
  public int compareTo(loanCalculator loan1) {
    // TODO Auto-generated method stub
    if(this.totalInterestPercentage - loan1.totalInterestPercentage > 0) { 
        return 1; 
    }

    if(this.totalInterestPercentage - loan1.totalInterestPercentage < 0) { 
        return -1; 
    }

    else if(this.totalInterestPercentage - loan1.totalInterestPercentage ==0) { 
        return 0; 
    }

    return 0;

  }

  public void difference(loanCalculator loan1) { 

    if(this.compareTo(loan1) == 1) { 
        System.out.print("Loan 2 is cheaper by: " + (this.totalInterestPercentage - loan1.totalInterestPercentage)); 
    }

    if(this.compareTo(loan1) == 0) { 
        System.out.print("The two loans cost the same");
    }

    else if(this.compareTo(loan1) == 1) { 
        System.out.print("Loan 1 is cheaper by: " + (this.totalInterestPercentage - loan1.totalInterestPercentage)); 
    }

  }
}

1 Ответ

0 голосов
/ 31 января 2019

(С нуля) Поместите код из метода main в новый метод:

public static void calculator() {
...
}

Затем вызовите calculator () в цикле в main:

while(true) {
    calculator();
}

Какпрекратить?Может как это:

 while(true) {
     try {
        calculator();
     } catch (Exception ex) { //scanner will throw an Exception on not valid input
        break;
     }
 }
...