2.4 控制语句
你经常需要控制程序的逻辑流程。如果某个条件成立,则执行某些操作;不成立则执行另外的操作。有时你想多次重复某个操作直到条件有所变化。你可以使用两种控制语句来实现以上提及的逻辑流程:一种是条件逻辑语句,判断条件为true还是false;另一种是循环语句,对一个操作重复一定的次数,或者一直重复到某个条件变为false为止。
2.4.1 if/then
if/then是一组条件逻辑语句,用法就跟这两个单词在英语中的意思差不多:“如果(if)下雨,那么(then)我就带把伞。”这个语句可以这样用:
if(条件) {
条件为true时的结果
} else {
条件为false时的结果
}
紧接着“if”的圆括号里必须是一个返回布尔类型值(true或false)的表达式。例如:
int myWeight = 72;
if(myWeight > 100) {
print(" you're getting heavy! ");
} else {
print(" you're still doing ok ");
}
“else”不是必需的:
int myHeight = 181;
if(myHeight > 200) {
print(" you're too tall ");
}
只有当if的条件语句为true时,才执行花括号里的操作;如果条件语句不为true,则什么都不做。你可以试一试把条件设为false,看看结果。
boolean allDone = false;
if(!allDone) { // 如果allDone的值取反后为true
print(" keep going! ");
} else {
print(" ok, quit! ");
}
条件控制语句还有一种写法:
if(age == 5){
print(" you're 5!");
} else if(age == 25) {
print(" you're 25!");
} else {
print(" can't login "); // 如果以上皆非
}
在上面这个例子里,使用了一个新语句“else if”,其作用在于在进入else条件判断之前插入一个判断。也就是如果第一个条件不为true,那么就看else if的条件是否为true,如果仍然不为true,就流到最后的else语句。
2.4.2 for循环
使用for语句可以按一定的次数和条件重复同一个操作。循环经常用于遍历数组元素,逐个元素地访问、使用或变更。循环非常有用,尤其是在处理图像像素、视频帧、声音、网络数据以及其他需要分类或排序的信息的时候:
int i;
for(i = 0; i < 10; i++) {
print(char(i)+", "); // 将打印 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
}
for语句的条件里有3个部分,如图2-5所示。
整数i用来设定循环执行的次数,每次循环执行花括号里的语句。初始化for循环的时候,把i设为0,只要i不大于10,循环继续执行,每执行完一次循环,i值增加1。
i也可以用自减来计数:
for(int i = 5; i>-1; i--){
print(i);
}
图2-5:for循环
for循环另外一个巨大的用处就是遍历数组元素:
int[] intArr = {0, 1, 2, 3, 4, 5};
int sum = 0;
for(int j = 0; j < 6; j++){
sum += intArr[j]; // 通过循环得到数组中的元素
}
循环每执行一次,数组intArr的下一个整型元素就会累加到Sum。
2.4.3 while循环
while循环和for循环类似,只是看起来简单一点:
while(trueOrFalse){
//每次循环执行的操作
}
只要while括号里的表达式仍然为true,循环就继续执行。要注意的是,如果括号里表达式一直不变为false,那么循环永远不会停下来,程序就会跑死。这叫“死循环”——无法终止并跳出的循环,会让程序无法使用甚至崩溃。所以在使用控制语句的时候,要对终止条件多加小心。下面是一个使用了计数器的例子:
int j = 0;
while(j < 100) {
print(" what's up? "+j);
j++; // 如果j不自加,就会变成死循环
}
每执行一次循环,j自加1。当j不小于100的时候,就会跳出循环,程序继续往下执行:
boolean ready = false;
float number = 0.0;
while(ready != true) {
print(" we're just waiting" );
number += 0.1;
if(number > 1.0){
ready = true;
}
}
print(" we're ready ");
在上面这个例子里,使用了一个自增的数和一个布尔型变量,去判断是否准备好(ready)跳出循环。直到变量ready变为true,循环才会停止,然后打印出“we抮e ready”的消息。
2.4.4 continue
continue语句告知程序跳过当前循环的其他语句而直接进行下一个循环。例如,如果你要循环若干次,但只在奇数次的时候执行某些操作,可以这样做:
for(int i = 0; i< 10; i++) {
if( i % 2 == 0){
continue;
}
println(i + " is not divisible by 2");
}
程序打印出以下内容:
1 is not divisible by 2
3 is not divisible by 2
5 is not divisible by 2
7 is not divisible by 2
9 is not divisible by 2
continue语句让程序跳进下一次循环。如果你有一个复杂的操作,可以使用continue语句去控制是否跳过这个操作而进入下一次循环,也就是说,可以避免程序做多余的事情。
2.4.5 break
使用break语句可中止循环。通常为了寻找某个东西而遍历一个数组,而当你找到它的时候,就可以用break语句轻松中止循环不再查找了,代码可以这样写:
int[] intArr = {1, 2, 3, 4, 5, 6, 2, 12, 2, 1, 19, 123, 1, 3, 13};
int counter = 0;
while(counter < intArr.length)
{
if(intArr[counter] == 5) { // 正在寻找5
print(" found it at ");
break;
}
counter++;
}
// break执行完毕后,代码从这里继续执行
print(counter); // 元素intArr[4]就是5