Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 使用while循环比较贷款支付和月利息-逻辑错误_String_If Statement_While Loop_Logic - Fatal编程技术网

String 使用while循环比较贷款支付和月利息-逻辑错误

String 使用while循环比较贷款支付和月利息-逻辑错误,string,if-statement,while-loop,logic,String,If Statement,While Loop,Logic,我目前正在开发一个while循环,它应该从用户那里获得以下信息-贷款金额、年利息和每月付款。它应将每月利息与每月付款进行比较,如果第一个月的利息超过或等于指定的付款,则会打开一个对话框,询问更大的金额,直到每月付款高于利息 在某些情况下,它似乎工作得很好(如果我为贷款输入1000,12%的利息,任何低于121的付款,程序要求更大的付款)。但是,如果我输入的贷款金额和每月付款彼此接近(500贷款金额400每月付款),我会收到错误对话框,说明我没有输入足够大的金额。啊 如果你能看一下的话,这是我的代

我目前正在开发一个while循环,它应该从用户那里获得以下信息-贷款金额、年利息和每月付款。它应将每月利息与每月付款进行比较,如果第一个月的利息超过或等于指定的付款,则会打开一个对话框,询问更大的金额,直到每月付款高于利息

在某些情况下,它似乎工作得很好(如果我为贷款输入1000,12%的利息,任何低于121的付款,程序要求更大的付款)。但是,如果我输入的贷款金额和每月付款彼此接近(500贷款金额400每月付款),我会收到错误对话框,说明我没有输入足够大的金额。啊

如果你能看一下的话,这是我的代码。谢谢

package program6;
import javax.swing.JOptionPane;

public class LoanAmount2 {

    public static void main(String[] args) {
        String loanAmountString = JOptionPane.showInputDialog(null, "Enter the amount for your loan.");
        double loanAmount = Double.parseDouble(loanAmountString);
        String annualInterestString = JOptionPane.showInputDialog(null, "Enter your annual interest rate.");
        double annualInterestRate = Double.parseDouble(annualInterestString);
        annualInterestRate = 1 + (annualInterestRate / 100);
        String monthlyPaymentString = JOptionPane.showInputDialog(null, "Enter the amount for your monthly payment.");
        double monthlyPayment = Double.parseDouble(monthlyPaymentString);
        double monthlyInterestRate = 1 + (annualInterestRate / 12);
        double monthlyInterest = loanAmount * monthlyInterestRate;
        while (monthlyInterest >= monthlyPayment) {
            monthlyPaymentString = JOptionPane.showInputDialog(null, "Your payment only covers the interest on your loan. Please enter a larger amount for your monthly payment.");
            monthlyPayment = Double.parseDouble(monthlyPaymentString);
            break;
        }

}

}

我刚刚运行了这个脚本,注意到了您的问题。该行:

double monthlyInterestRate = 1 + (annualInterestRate / 12);
应改为:

double monthlyInterestRate = annualInterestRate / 12;

如果你在这个while循环中添加一个,你的while循环将始终计算为true,因为你是将全部贷款金额乘以1.xx,我建议尝试将这个问题分解成更小的部分。在程序中多次重复此模式:

    String annualInterestString =
        JOptionPane.showInputDialog(null,
                    "Enter your annual interest rate.");
    double annualInterestRate =
        Double.parseDouble(annualInterestString);
我认为,如果您提供了如下方法,那么阅读代码会更容易:

double prompt_for_number(String prompt) {
    /* show dialog box */
    /* parse string into a Double */
    /* return number */
}
这样可以让您更像这样重新编写代码:

loanAmount = prompt_for_number("Enter the amount for your loan.");
annualInterestRate = prompt_for_number("Enter your annual interest rate.");

这将使我们更容易看到所涉及的计算流程。(如果你到这里来,会发现更容易发现的实际错误。)

很好的建议。我认为我的编程还没有达到那个水平(还没有达到方法),但我会记住这一点,谢谢