Таблица амортизации
Эта программа рассчитает таблицу амортизации для пользователя. Проблема в том, что мое назначение требует использования подпрограмм. Я полностью забыл об этом, есть идеи о том, как изменить это, чтобы включить подпрограммы?
public class Summ {
public static void main(String args[]){
double loanamount, monthlypay, annualinterest, monthlyinterest, loanlength; //initialize variables
Scanner stdin = new Scanner (System.in); //create scanner
System.out.println("Please enter your loan amount.");
loanamount = stdin.nextDouble(); // Stores the total loan amount to be payed off
System.out.println("Please enter your monthly payments towards the loan.");
monthlypay = stdin.nextDouble(); //Stores the amount the user pays towards the loan each month
System.out.println("Please enter your annual interest.");
annualinterest = stdin.nextDouble(); //Stores the annual interest
System.out.println("please enter the length of the loan, in months.");
loanlength = stdin.nextDouble(); //Stores the length of the loan in months
monthlyinterest = annualinterest/1200; //Calculates the monthly interest
System.out.println("Payment Number\t\tInterest\t\tPrincipal\t\tEnding Balance"); //Creates the header
double interest, principal; //initialize variables
int i;
/* for loop prints out the interest, principal, and ending
* balance for each month. Works by calculating each,
* printing out that month, then calculating the next month,
* and so on.
*/
for (i = 1; i <= loanlength; i++) {
interest = monthlyinterest * loanamount;
principal = monthlypay - interest;
loanamount = loanamount - principal;
System.out.println(i + "\t\t" + interest
+ "\t\t" + "$" + principal + "\t\t" + "$" + loanamount);
}
}
}
2 ответа
Любые идеи о том, как изменить это, чтобы включить подпрограммы?
Ну, тебе лучше сделать это наоборот; то есть выяснение, какими должны быть методы, прежде чем писать код.
То, что вы делаете, это рефакторинг формы или кода. Вот неофициальный рецепт для этого.
- Изучите код, чтобы найти разделы, которые выполняют определенную задачу и дают единый результат. Если вы можете придумать простое имя, которое отражает то, что делает задание, то это хороший знак. Если у задачи мало зависимостей от локальных переменных, в которых она в данный момент "сидит", это тоже хороший знак.
- Напишите объявление метода с аргументами для передачи значений переменных и типом результата для возврата результата.
- Скопируйте существующие операторы, которые выполняют задачу, в метод.
- Настройте тело нового метода так, чтобы ссылки на локальные переменные из старого контекста были заменены ссылками на соответствующие аргументы.
- Разобраться с возвращенным значением.
- Перепишите исходные операторы как вызов вашего нового метода.
- Повторение.
Такая среда, как Eclipse, может позаботиться о ручной работе по рефакторингу.
Тем не менее, настоящий навык состоит в том, чтобы решить, как лучше разделить "кусок" кода на отдельные задачи; то есть способ, который будет иметь смысл для тех, кто должен читать / понимать ваш код. Это приходит с опытом. И IDE не может принимать эти решения за вас.
(И я говорил, что с самого начала легче спроектировать / реализовать методы?)
Я удалил свой предыдущий комментарий, ответив на свой вопрос, прочитав соответствующие теги:-)
В качестве примера, определите такой метод в своем классе:
public double CalculateInterest(double loanAmount, double interestRate) {
//do the calculation here ...
}
А затем вызвать метод по имени в другом месте в вашем коде класса, например
double amount = CalculateInterest(5500, 4.7);