Java Do While语句逻辑错误

时间:2015-11-05 15:07:37

标签: java

我需要做一个do-while语句来替换测试输入利率的if语句。它必须> = 0且小于1.0。如果利率> = 0,它将继续询问利率,直到输入有效数字。然后,如果该有效数字大于1.0,它将采用该速率并除以100.0,因为它们必须是小于1.0的十进制值。

 ...    

      do {
         System.out.println("Please enter the interest rate on your loan, must be >= 0:");
         interestRate = keyboard.nextDouble();
      }  while (interestRate < 0.0);
      do {
         interestRate = (interestRate/100.0);
         System.out.println("Interest rates must be entered as decimal values less than" +
         " 1.0. Interest rate will be saved as " + interestRate);
      }  while (interestRate > 1.0);

...

由于一个我无法弄清楚的原因,无论输入什么输入,利率都被除以100.0,而如果输入的数字大于1.0,它只应该这样做。

3 个答案:

答案 0 :(得分:1)

不,因为它不是一个while循环,是一个do while而且语句是第一次执行,无论条件是否满足......

如果您想要实现您要求使用的内容,请阅读文档中的do while循环。

答案 1 :(得分:1)

do循环始终至少执行一次。这实际上不是循环的地方(虽然while循环可行)。最好的选择是if声明。

但是......如果你必须使用do循环...

在循环之间添加interestRate*=100.0;可以解决您的问题。

这样一来,如果利率最初小于1,一切都会很好。如果它最初大于1,它将被除以100两次,所以一切都按计划进行。

这可能有点乱,但我认为它会解决所有问题。

  do {
     System.out.println("Please enter the interest rate on your loan, must be >= 0:");
     interestRate = keyboard.nextDouble();
  }  while (interestRate < 0.0);
  interestRate*=100.0;
  String str = "";
  do {
     interestRate = (interestRate/100.0);
     System.out.print(str);
     str="Interest rates must be entered as decimal values less than" +
     " 1.0. Interest rate will be saved as " + interestRate/100.0 + "\n";
  }  while (interestRate > 1.0);

答案 2 :(得分:0)

试试这个:

boolean tryAgain = true;
do {
  System.out.println("Please enter the interest rate on your loan: ");
  interestRate = keyboard.nextDouble();
  if (interestRate >= 0.0 && interestRate < 1.0f){
    System.out.println("Error, Interest rate is improperly formatted!\n");
  } else {
    /* Do calculations Here */
    tryAgain = false
  }
} while (tryAgain);

您也可以只用while语句编写它:

boolean tryAgain = true;
while (tryAgain){
  System.out.println("Please enter the interest rate on your loan: ");
  interestRate = keyboard.nextDouble();
  if (interestRate >= 0.0 && interestRate < 1.0f){
    System.out.println("Error, Interest rate is improperly formatted!\n");
  } else {
    /* Do calculations Here */
    tryAgain = false
  }
}

修改

只需阅读while语句评论......

问题&#34;做什么&#34;循环是它使得无法捕获错误,因为一切都在&#34; do while&#34;块。所以,无论你多累,你的错误捕获代码总是会运行,如果你使用的是&#34;做什么&#34;。

非常很难与#34;而#34;声明,因为如果你不小心,你的程序将陷入无限循环。

编辑2:

经过一杯沉思的柠檬水后,我想我有一个解决方案......

do {
    System.out.println("Please enter the interest rate on your loan, must be >= 0:");
    interestRate = keyboard.nextDouble();
    System.out.println();
}  while (interestRate < 0.0 && interestRate > 1.0);
/* Calculations and output follow. */

这将导致输入循环,直到输入正确的值。

问题是&#34;如果大于1除以100得到百分比&#34;,则为if。你想要中断一个逻辑分支,但如果不使用if语句,就不可能(据我所知)。所以你只能有一个用户输入小数的地方,或者另一个用户输入0到100的数字。可悲的是,这可能是你不能吃蛋糕并吃掉它的情况之一。 / p>