[ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ] РЕДАКТИРОВАТЬ: Проблема была сужена до того, что я исчисляю сумму платежей, необходимую неточно. Теперь мне нужен способ рассчитать количество платежей, необходимых для погашения x суммы займа, с y суммой процентов и z суммой, выплачиваемой только за месяц. Мой первоначальный подход состоял в том, чтобы взять ежемесячный платеж, предоставленный пользователем (например, 250 долларов США) с процентной ставкой (например, 13,5%), чтобы погасить кредит (например, 1000 долларов США) и получить сумму, выплаченную за интересующий месяц (странно, я знаю) Таким образом, вы получите:
250 - 250 * 0,135 = 216,25
Затем разделите общую сумму кредита на это число, так что
1000 / 216,25 = 4,62
Затем установите значение, чтобы получить 5 полных платежей. Это сработало для только что приведенного примера, как вы можете видеть в коде внизу моего поста, но если мы возьмем для примера:
Кредит на 200 000 долларов США, 6% процентная ставка и выплаты в размере 1500 долларов США в месяц, мы получаем:
1500 - 1500 * 0,06 = 1410
А потом:
200 000 долл. США / 1410 = 141,8 долл. США
Таким образом, сумма платежей (в соответствии с этим расчетом) должна составлять 142. Однако это совершенно неверно, как вы можете видеть в ветке комментариев. Методом проб и ошибок правильное количество платежей на самом деле составляет 221, и я до сих пор не смог получить это значение, используя какие-либо расчеты. Отсюда следующее:
tl; dr - мне нужен способ, чтобы точно рассчитать количество платежей в амортизации, используя только начальную сумму кредита, процентную ставку и предлагаемую сумму, выплачиваемую в месяц.
Заранее спасибо, и это определение сужает проблему.
[ОРИГИНАЛЬНАЯ ПОЧТА] Я создал программу, которая делает графики амортизации для моего класса AP Compsci. Все шло гладко, пока я не скажу программе обрабатывать большие числа. По какой-то причине программа просто останавливается на определенном значении, и я не могу понять, почему. Я надеялся, что кто-то здесь может помочь мне отладить это.
Я использую intelliJ для своей IDE, и я не знаю, какая другая информация действительно поможет здесь.
Прежде всего: да, я знаю, что должен использовать ArrayList вместо 1d-массива, я начал это до того, как мы узнали о них в классе, и мне не хочется его переделывать. Я просто хочу знать проблемы с моим существующим кодом, чтобы я мог передать его и покончить с этим. Единственное требование - чтобы он функционировал должным образом. Да, я знаю, что код - полный отстой, я не хочу его слышать, пожалуйста. Просто ищу проблему с моим существующим кодом. Да, я знаю, что отстой в кодировании. Пожалуйста, не жарите; -;
Попытка закомментировать цикл, буквально вычислить его вручную, пройти шаг за шагом и т. Д. Кажется, нельзя сделать какой-либо вывод.
Вот метод:
public static void amortization(){
int[] info = new int[10000000];
double Lamt;
double IRate;
double MRate;
double payMonth;
double firstlyMonth;
double interestedSub;
double interestedAmt;
double amtPayments;
double mPayment;
double iPayment;
double pPayment;
double pBalance;
double q;
double finalMPymt;
double finalIPymt;
double finalPPymt;
double finalPBalance;
Scanner amortkey = new Scanner(System.in);
System.out.println("Please enter the following values:");
System.out.println("Loan amount:");
Lamt=amortkey.nextDouble();
System.out.println("Annual Interest Rate, in decimal form:");
IRate=amortkey.nextDouble();
System.out.println("Monthly Payment Amount:");
payMonth=amortkey.nextDouble();
interestedSub=payMonth * IRate;
interestedAmt=payMonth - interestedSub;
firstlyMonth=Lamt / interestedAmt;
amtPayments=Math.ceil(firstlyMonth);
MRate=IRate / 12;
for(int a=0; a<amtPayments; a++){
info[a]=a+1;
}
System.out.println();
System.out.println(" PAYMENT MONTHLY INTEREST PRINCIPAL PRINCIPAL");
System.out.println(" NUMBER PAYMENT PAYMENT PAYMENT BALANCE");
System.out.println();
pBalance=Lamt; //1000
//THIS LOOP DETERMINES THE CHART
for(int b=0; b<amtPayments-1; b++){//b starts 0, must climb to the payments that must be made.
iPayment=pBalance * MRate; //calculate interest payment by taking the rate portion of the principal away.
pPayment=payMonth - iPayment;//calculate principal payment independently from total month pay
q=pBalance - pPayment;//calculate new balance of principal, q
mPayment=iPayment + pPayment;//make monthly payment equal to whatever the principal is plus the interest owed
pBalance=q;//reset the loop with a new principal balance
System.out.println(" " + info[b] + " " + Math.round(mPayment * 100.00) / 100.00 + " " + Math.round(iPayment * 100.00) / 100.00 + " " + Math.round(pPayment * 100.00) / 100.00 + " " + Math.round(pBalance * 100.00) / 100.00);
System.out.println();
if(pBalance<mPayment){
finalIPymt=pBalance * MRate;
finalMPymt=pBalance + finalIPymt;
finalPPymt=pBalance;
finalPBalance=0;
System.out.println(" " + info[b+1] + " " + Math.round(finalMPymt * 100.00) / 100.00 + " " + Math.round(finalIPymt * 100.00) / 100.00 + " " + Math.round(finalPPymt * 100.00) / 100.00 + " " + Math.round(finalPBalance * 100.00) / 100.00);
}
}
}
Сначала попробуйте числа 1000, 0,135 и 250.
Ожидаемый вывод
PAYMENT MONTHLY INTEREST PRINCIPAL PRINCIPAL
NUMBER PAYMENT PAYMENT PAYMENT BALANCE
1 250.0 11.25 238.75 761.25
2 250.0 8.56 241.44 519.81
3 250.0 5.85 244.15 275.66
4 250.0 3.1 246.9 28.76
5 29.09 0.32 28.76 0.0
И фактический результат действительно одно и то же. Это работает как шарм.
Теперь попробуйте эти числа: 200000, 0,06 и 1500.
По какой-то странной причине программа заканчивается на входе 141 с окончательным выводом:
141 1500.0 494.88 1005.12 97970.54
Он заканчивается кодом выхода 0, без ошибок, и просто останавливается прямо здесь.
Я знаю, что просить много, но я был бы признателен, если бы кто-то поместил код в свою IDE и возился с ним, пока не обнаружил проблему. Пожалуйста, попробуйте точные цифры, которые я привел в этом посте, и посмотрите, если что-то не так, я хочу сравнить проблему с решением. Снова извиняюсь за грязный и любительский код, я все еще новичок во всем этом. Я ценю любую помощь, и спасибо заранее.
Приветствия: D