Как мне l oop, пока я не получу правильный ответ? - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь запрограммировать что-то, что повторяется, пока не получит правильное количество. Моя программа - это, в основном, кредитная программа, которая помогает вам выяснить, сколько времени вам потребуется, чтобы погасить кредит с процентами. До сих пор мне удалось распечатать первый месяц (хотя и не совсем верно ...), но мне нужно его повторять до тех пор, пока сумма кредита не будет погашена. Я надеюсь, что это имеет смысл.

import java.util.*;
import java.io.*;

public class Project4{
    static Scanner console = new Scanner(System.in);

    public static void main(String[] args) throws FileNotFoundException
    {
        Scanner keyboard = new Scanner(System.in);
        Scanner user_input = new Scanner(System.in);
        Scanner scan = new Scanner(System.in);

        PrintWriter outFile = new PrintWriter("Project4.out");

        double lamnt;
        double mpay;
        double intrestrate;
        double mnthintrest;
        double mintrestrate;

        System.out.print("Enter the Loan Amount: ");
        lamnt = keyboard.nextDouble();
        System.out.println();;

        System.out.print("Enter the intrest rate (Ex:5.75): ");
        intrestrate = keyboard.nextDouble();
        System.out.println();

        System.out.print("Enter the monthly payment you want to make: ");          
        mpay = keyboard.nextDouble();
        System.out.println();

        mintrestrate = intrestrate/12;
        mnthintrest = lamnt*mintrestrate; 

        System.out.println("The first month intrest rate is:" + pay);           
     }          
 }

Мне предложили использовать некоторое время l oop, но я не слишком уверен, как заставить пока l oop продолжать работать, пока сумма кредита не будет погашена , Также да, я знаю, что результат не правильный, я работаю над этой частью. Я не слишком уверен, как правильно расположить названия. Мне нужно, чтобы результат выглядел следующим образом: (используя 1000 при выплате кредита, 7,2 при процентной ставке, 25 при ежемесячной выплате)

Сумма кредита после платежа № 1 составляет: 981,00 Принцип: 19,00 Проценты: 6,00

Сумма кредита после платежа № 2 составляет: 961,89 Принцип: 19,11 Процент составляет: 5,89

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Предполагая, что процентная ставка будет введена в процентах, для расчета mnthintrest потребуется дополнительное умножение на 1/100, т. Е. 0,01

mnthintrest = lamnt*mintrestrate*(0.01); 

Вам также необходимо отредактировать переменную pay to mpay

System.out.println("The first month intrest rate is:" + pay); 

Я думаю, что ваши логики c для денег, выплачиваемых в месяц, должны (как другие предлагали) - уменьшить сумму кредита, пока она не достигнет нуля.

Теперь перейдем к реализации, вы будете уменьшая количество и поскольку мы не хотим, чтобы исходные данные (переменные) были затронуты, мы могли бы сначала сохранить их во временной переменной. Для отслеживания #number платежа мы можем сохранить количество месяцев в другой переменной.

Можно придумать что-то вроде этого:

double temp = lamnt;   
int monthNumber = 1;

while(temp>0){

    mnthintrest = temp*mintrestrate*0.01;
    double principlePaidPerMonth= mpay- mnthintrest;

    temp = temp - principlePaidPerMonth; // reducing the principle amount paid before printing         
    System.out.println("\nAmount left after payment "+monthNumber+" is:" + temp);
    System.out.println("This month intrest is:" + mnthintrest);
    System.out.println("Principle paid is:" + principlePaidPerMonth);


    monthNumber++;

}   

// text to be printed could be different

Хорошей практикой является сохранение переменной имена как можно более значимые и объявлять переменные как можно ближе к их первому использованию. Таким образом, вы можете объявить переменные для процентов и процентной ставки как раз во время инициализации выше, где начинается часть while l oop.

double mintrestrate = intrestrate/12;
double mnthintrest = lamnt*mintrestrate; 

Для форматирования вы можете использовать System.out.printf() вместо println - это может помочь отформатировать количество цифр, показанных после десятичной дроби

Для получения точности - вы можете использовать абсолютные / потолочные функции, доступные в классе Math.

0 голосов
/ 29 апреля 2020

Итак, если вы хотите использовать некоторое время l oop, пока ваш кредит не будет погашен, просто сделайте что-то вроде:

while (lamnt > 0) {
    // Do stuff to pay off the loan here.
}

Пока вы обновляете lamnt в пределах l oop, это должно сработать.

Надеюсь, что это помогло!
;)

Редактировать: Кроме того, убедитесь, что вы создаете только те сканеры, которые действительно используете. И не забудьте закрыть их в конце диапазона!

...