1.11 两种控制语句
在方法内部,语句的执行是按语句出现的顺序执行。换句话说,执行从一条语句到另一条语句,自上而下顺序执行。但是,也可以根据一些条件改变流程。这样的情况在编程界非常常见。下面是一个例子。一个网站也许会需要输入一个密码。代码必须保证在密码无效时拒绝访问。于是,如果输入了无效的密码,则不能执行那些需要访问权限的代码。还是这个例子,在输入无效的密码时,可能会给用户两次或更多次正确输入密码的机会。为了解决这种情形,需要改变程序的执行流。Java提供了一种丰富的控制语句(control statement)。尽管第3章会详细介绍控制语句,但是这里简单介绍if语句和for语句。它将在后面编写例程时用到。
1.11.1 if语句
通过使用if语句,可以选择性地执行一部分程序。if语句是Java最基本的决策语句。所以,if语句是Java乃至一般编程最基础的元素之一。我们可以用if语句判定是否一个数小于另一个数,检查一个变量是否包含目标值,或测试某个错误情况。还有很多情形。
最简单的if语句具有以下形式:
if(condition) statement;
这里,condition是一个用来评估真假的表达式,这样的表达式称为布尔表达式(Boolean expression)。如果condition为真,就执行后续语句。如果condition为假,就跳过后续语句。于是,条件可以用来控制是否执行后续语句。下面是一个例子:
在这行中,小于操作符(<)用来判断10是否小于11。由于10小于11,因此条件表达式为真,执行println()方法。与之相对,考虑下面的情况:
在这个例子中,10并不小于9。所以,没有调用方法println()。
小于号(<)是Java的关系运算符(relation operator)之一。关系运算符决定两个值之间的关系。Java完整地定义了在条件表达式中所有互补的关系运算符。它们是:
注意,检测相等性使用两个等号。在所有情形下,关系运算符的结果不是真就是假。
下面的程序说明了if语句和关系运算符的用法。
该程序的输出为:
另外,还请注意,在该程序中:
该行代码通过用逗号分隔的列表定义了三个变量a、b和c。本书曾提及,若需要两个或更多相同类型的变量,它们可以在同一个语句中声明。只需要将变量名用逗号隔开即可。
1.11.2 for循环
许多情况下,程序需要多次执行一个任务。例如,可能想显示一天中的时间,而时间每秒更新一次。显然,为每个可能的时间(每秒一次),编写一个使用无数不同的println()语句的程序是不现实的。所以,这样的重复操作需要用循环(loop)来完成。循环是重复执行一系列代码的控制语句。循环广泛运用在几乎所有程序中。像if语句一样,循环也是编程的基础部分。
Java提供了强有力的一大类循环结构。这里将介绍for循环。for循环最简单的形式如下:
for(initialization; condition; iteration) statement;
在最常见的形式中,循环的initialization部分将循环控制变量(loop control variable)设置为一个初始值。condition是一个布尔表达式,它测试循环变量。如果测试的结果为真,for循环继续迭代。如果测试的结果为假,循环结束。表达式iteration决定在每次循环迭代中控制变量如何变化。下面的程序说明了for循环的用法:
程序的输出如下所示:
在这个例子中,count是循环控制变量。它在for循环的初始化部分设置为0。在每次迭代开始时(包括第一次迭代),测试条件count<5。如果测试结果为真,执行println()语句,然后执行循环的迭代部分。这个过程一直继续,直到测试条件为假。执行点转移到循环的底部。有趣的是,在专业人士编写的Java程序中,几乎不会看到像前面那样的循环的迭代部分。即,很少看到这样的代码:
这是因为Java包括一个特殊的增量运算符来使这个操作更加有效。这个增量运算符是++,即两个连续的加号。增量运算符将操作数增加1。使用增量运算符,前述语句可以写成这样:
于是,for循环通常写成这样:
你也可以试一试,循环将会同样有效地执行。
Java还提供了减量运算符,记为--。这个操作符将操作数递减1。