我需要做一个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,它只应该这样做。
答案 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>