do 循环
do 循环
以下述方式执行:执行标记为循环的代码,然后进行一个布尔测试,如果测试结果为 true
,就再次执行这段代码,并重复这个过程。当测试结果为 false
时,就退出循环。
do 循环的结构如下:
do
{
<code to be looped>
} while (<Test>);
其中计算 <Test>
会得到一个布尔值。
⚠️ while 语句之后必须使用分号。
例如,使用该结构可以把从 1~10 的数字输出到一列上:
int i = 1; do { Console.WriteLine("{0}", i++); } while (i <= 10);
在把
i
的值写到屏幕上后,使用后缀形式的++
运算符递增i
的值,所以需要检查一下i <= 10
,把 10 也包含在输出到控制台的数字中。
下面的示例使用这个结构略微修改一下本节引言中的代码。该段代码计算了一个账户在 10 年后的余额。这次使用一个循环,根据起始的金额和固定利率,计算该账户的金额要花多长时间才能达到某个指定的数值。
把下述代码添加到 Program.cs
中:
static void Main(string[] args)
{
double balance, interestRate, targetBalance;
Console.WriteLine("What is your current balance?");
balance = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("What is your current annual interest rate(in %)?");
interestRate = 1 + Convert.ToDouble(Console.ReadLine()) / 100.0;
Console.WriteLine("What balance woule you like to have?");
targetBalance = Convert.ToDouble(Console.ReadLine());
int totalYears = 0;
do
{
balance *= interestRate;
++totalYears;
} while (balance < targetBanlance);
Console.WriteLine("In {0} year{1} you'll have a balance of {2}.",
totalYears, totalYears == 1 ? "" : "s",
balance);
Console.ReadKey();
}
示例的说明
这段代码利用固定的利率,对年度计算余额的过程重复必要的次数,直到满足条件为止。在每次循环中,递增一个计数器变量,就可以确定需要多少年:
int totalYears = 0; do { balance *= interestRate; ++totalYears; } while (balance < targetBalance);
然后就可以将这个计数器变量用作输出结果的一部分:
Console.WriteLine("In {0} year{1} you'll have a balance of {2}.", totalYears, totalYears == 1 ? "" : "s", balance);
- 这可能是
? :(三元)
运算符最常见的用法了 --用最少的代码有条件地格式化文本。这里,如果totalYears
不等于 1,就在year
后面输出一个 s。
do
循环至少执行一次。有时(如这个示例)这并不是很理想。当然,可以添加一个 if
语句。
int totalYears = 0;
if (balance < targetBalance)
{
do
{
balance *= interestRate;
++totalYears;
} while (balance < targetBalance);
}
Console.WriteLine("In {0} year{1} you'll have a balance of {2}.",
totalYears, totalYears == 1 ? "" : "s",
balance);
这显然无谓地增加了复杂性。更好的解决方案是使用 while 循环
。
🔚