0

プログラムは正常に実行されますが、ネストされた do-while ループが機能しません。while の状態を見ると、それは検証でなければならず、それらの数値の範囲内にない場合は、再度質問する必要があることがわかります。プリンシパル do- while は、プリンシパルが 0 に等しくないことを検証する必要があることがわかります。

私は宣言する:

import java.util.Scanner;
import java.text.DecimalFormat;
public class ACMEMORTGAGE
{
   public static void main (String args [])

   {
       //Declare variables 
        double rate=0, monthlyPayments, numberMonthlyPayments, paymentAmount;
        int mortgageTerm, principal, years=0;

        Scanner key=new Scanner(System.in);

        DecimalFormat decimalPlaces=new DecimalFormat("$0.00");
        do
        {
            System.out.print("Enter principal amount (0 to end program):");
            principal=key.nextInt();

            do

            {
            System.out.print("Enter mortgage amortization (1, 2, 3, 5, 10.):");
            mortgageTerm=key.nextInt();

            if (mortgageTerm==1)
            {
                rate=0.035;
            }
            else if (mortgageTerm==2)
            {
                rate=0.039;
            }
            else if (mortgageTerm==3)
            {
               rate=0.044;
            }
            else if (mortgageTerm==5)
            {
               rate=0.05;
            }
             else if (mortgageTerm==10)
            {
                rate=0.060;  
            }


            } while (mortgageTerm==1 || mortgageTerm==2 || mortgageTerm==3 || mortgageTerm==5 || mortgageTerm==10);


            do
           {     
            System.out.print("Enter mortgage ammortization period (5, 10, 15, 20, 25):");
            years=key.nextInt();

           } while (years==5 && years==10 && years==15 && years==20 && years==25);               

       double i, n, x;

       i=rate/12;
       n=12*years;


       monthlyPayments= ((principal*(Math.pow(i+1, n)*(i))) / (Math.pow(i+1, n) - 1));
       System.out.print("Monthly payments amount:");    
       System.out.println(decimalPlaces.format(monthlyPayments));

     }while (principal!=0);

   }

}
4

2 に答える 2

3

それぞれ=で比較演算子 ( ) の代わりに代入演算子 ( ) を使用していますが、これは誤りです。Cではそうするかもしれませんが(通常はバグの兆候です)、Javaでは句の中でブール式を使用する必要があります。次のようにする必要があります。==ifif

if (years == 1)

等々。

于 2012-10-13T16:00:26.173 に答える
1
if (years=1)

ここでは、に値1を割り当てていますyears。したがって、inyourの結果は式expressionifはありませんboolean

さて、Javaは内部の条件が値ifに評価されることを期待してbooleanいるので、互換性のない型を与えます。

次を使用する必要があります:-

if(years == 1)

while同様に、ステートメントを次のように変更する必要があります。

while (years==1 && years==2 && ...);
于 2012-10-13T16:02:29.230 に答える