-3

0 で除算するエラーが発生し続けるコードがいくつかあります。毎月の支払い額を計算することを想定しています!

import java.io.*;

public class Bert
{
public static void main(String[] args)throws IOException
{
    //Declaring Variables
    int price, downpayment, tradeIn, months,loanAmt, interest;
    double annualInterest, payment;
    String custName, inputPrice,inputDownPayment,inputTradeIn,inputMonths, inputAnnualInterest;
    BufferedReader dataIn = new BufferedReader(new InputStreamReader(System.in));

   //Get Input from User
    System.out.println("What is your name?  ");
    custName = dataIn.readLine();
    System.out.print("What is the price of the car?  ");
    inputPrice = dataIn.readLine();
    System.out.print("What is the downpayment?  ");
    inputDownPayment = dataIn.readLine();
    System.out.print("What is the trade-in value?  ");
    inputTradeIn = dataIn.readLine();
    System.out.print("For how many months is the loan?  ");
    inputMonths = dataIn.readLine();
    System.out.print("What is the decimal interest rate?  ");
    inputAnnualInterest = dataIn.readLine();

    //Conversions
    price = Integer.parseInt(inputPrice);
    downpayment = Integer.parseInt(inputDownPayment);
    tradeIn = Integer.parseInt(inputTradeIn);
    months = Integer.parseInt(inputMonths);
    annualInterest = Double.parseDouble(inputAnnualInterest);




            interest =(int)annualInterest/12;
            loanAmt = price-downpayment-tradeIn;

            //payment = loanAmt*interest/a-(1+interest)
            payment=(loanAmt/((1/interest)-(1/(interest*Math.pow(1+interest,-months)))));
    //Output
    System.out.print("The monthly payment for " + custName + " is $");
    System.out.println(payment);
            // figures out monthly payment amount!!!
}
}

支払い変数を設定しようとすると、問題が発生します。0 で除算するエラーが発生し続ける理由がわかりません。

4

4 に答える 4

2

変数を Int として宣言したため1/interest1/(interest*Math.pow(1+interest,-months))0 が返されます。変数の型を float または double に変更します。

于 2012-10-01T02:44:04.043 に答える
0

これは常に0に丸められます。したがって、例外が発生します。

   (1/interest)-(1/(interest*Math.pow(1+interest,-months))))); 

intの代わりにfloat型を使用してください。それらがどのように機能するかを学びます。

于 2012-10-01T02:55:35.860 に答える
0

あなたへの 1 つの提案は、コードを「後方スライス」することを学ぶべきだということです。

これは、あなたが得ていることがわかったらDivideByZeroException、あなたのコードを見て、「なぜこれが起こるのか?」と言うべきであることを意味します.

あなたの場合、これを見てみましょう:

payment=(loanAmt/((1/interest)-(1/(interest*Math.pow(1+interest,-months)))));

したがって、今でMath.powはゼロを返すことはありません (累乗であるため)。したがって、ゼロである必要がありinterestます。その理由を見てみましょう。

interest =(int)annualInterest/12;

そのため、Java の整数除算では切り捨てが行われます。これは、.5 がある場合、それが切り捨てられてゼロになることを意味します。(同様に、1.3 は 0 に切り捨てられます)。

だから今:

annualInterest = Double.parseDouble(inputAnnualInterest);

これは、12 未満の値に解析される何かを渡していることを意味します。12 より大きい場合は、別の値が得られます。

ただし、無効な文字列を渡しているだけかもしれません。たとえば、渡しても機能し"hello2.0"ません!

于 2012-10-01T02:50:43.623 に答える