使用嵌套循环的Java验证

使用嵌套循环的Java验证,java,javascript,Java,Javascript,程序运行良好,但嵌套的do while循环不起作用。如果你看到的情况,而你可以看到,它必须是一个验证,如果它不在这些数字的范围内,它必须再次提出问题。您可以看到,主体do-while必须验证主体不等于0,如果它从程序中退出 我宣布: import java.util.Scanner; import java.text.DecimalFormat; public class ACMEMORTGAGE { public static void main (String args [])

程序运行良好,但嵌套的do 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);

   }

}

在每个
if
中使用赋值运算符(
=
)而不是比较运算符(
=
),这是一个错误。在C语言中,您可能会这样做(这通常是一个bug的指示),而在Java中,您必须在
if
子句中使用布尔表达式。应该是:

if (years == 1)

依此类推。

在每个
if
中使用赋值运算符(
=
)而不是比较运算符(
=
),这是一个错误。在C语言中,您可能会这样做(这通常是一个bug的指示),而在Java中,您必须在
if
子句中使用布尔表达式。应该是:

if (years == 1)
if (years=1)
等等

if (years=1)
在这里,您将为您的
年份指定一个值
1
。因此,
if
中的
表达式
的结果不是
布尔表达式

现在,由于Java期望
if
中的条件求值为
布尔值,因此它给出了不可映射的类型

你应使用:

if(years == 1)
同样,您需要将
while
语句更改为:-

while (years==1 && years==2 && ...);
在这里,您将为您的
年份指定一个值
1
。因此,
if
中的
表达式
的结果不是
布尔表达式

现在,由于Java期望
if
中的条件求值为
布尔值,因此它给出了不可映射的类型

你应使用:

if(years == 1)
同样,您需要将
while
语句更改为:-

while (years==1 && years==2 && ...);

您可以使用
==
进行比较<代码>=
用于分配您使用
=
进行比较
=
用于赋值,同时while向我显示了另一个错误调用:“二进制运算符的操作数类型错误&&,第一个类型int;第二个类型int”这是同一个问题,使用
=
,而不是
=
,我管理我正在做的数学和程序运行,但循环的验证没有。我在尝试,如果用户不输入允许的数字,问题就会再次出现。同时,while向我显示了另一个错误调用:“二进制运算符的操作数类型不正确&&,第一个类型int;第二个类型int”这是同一个问题,使用
==
,而不是
=
,我会处理我正在进行的数学运算和程序运行,但循环的验证并不是这样。我试着说,如果用户不输入允许的数字,那么问题就会再次被问出来。如果说
if(x=1)
等同于
if(1)
,这是不正确的,因为前者也有赋值的副作用。当然,在这种情况下,这并不重要,因为编译器对此犹豫不决,但如果变量是布尔值,那就很重要了。我设法完成了我正在做的数学运算,程序也在运行,但循环的验证并不重要。我在尝试,如果用户不输入允许的数字,问题会再次被问。@user1709115。。如果他输入了正确的数字,你想再问一次这个问题吗,在这种情况下也是?不,如果他输入了5、10、15、20、25之间的数字,它会移动到下一个循环(这也不起验证作用),那么说
if(x=1)
等同于
if(1)
,就不太正确了,因为前者也有分配的副作用。当然,在这种情况下,这并不重要,因为编译器对此犹豫不决,但如果变量是布尔值,那就很重要了。我设法完成了我正在做的数学运算,程序也在运行,但循环的验证并不重要。我在尝试,如果用户不输入允许的数字,问题会再次被问。@user1709115。。如果他输入了正确的数字,你想再问一次这个问题吗,在这种情况下也是?不,如果他输入了介于5、10、15、20、25之间的数字,它将移动到下一个循环(验证也不起作用)