和c/c++一样,java也有相似的流程控制语句,如if-else,while,do-while,for,return,break等
一.true和false
所有条件语句都利用条件表达式的真或者假来决定执行路径,这里有一个条件表达式的例子,a==b 如果该表达式的值是真的返回true反之返回false,和c不同的是java不允许使用数字作为布尔值使用,如果想在布尔测试中使用一个非布尔值,则必须将其转化为布尔值,例如:if(a!=0)
二. if-else
if-else语句是控制程序流程的最基本形式,其中的else是可选的,即有一下两种形式
if(Boolean-expression)
statement
if(Boolean-expression)
statement
else
statement
布尔表达式必须产生一个布尔结果,statement指用分号结尾的简单语句,或封闭在花括号内的一组简单语句。
三.迭代
while,do-while,和for用来控制循环,有时将他们划分为迭代语句,语句会重复执行,直到起控制作用的布尔表达式得到“假”的结果为止。
while循环的格式如下:
while(Boolean-expression)
statement
循环刚开始时,会计算一次布尔表达式的值,而在下一次迭代开始之前会再计算一次。
public class WhileTest {
static boolean condition() {
boolean result = Math.random() < 0.99;
System.out.print(result + ", ");
return result;
}
public static void main(String[] args) {
while(condition())
System.out.println("Inside 'while'");
System.out.println("Exited 'while'");
}
} /* (Execute to see output) *///:~
这个例子中,condition()方法用到了Math库中的static犯法random()该方法的作用是产生0和1之间的一个double值,result的值是通过比较操作符<而得到它。
do-while:
do
statement
while(Boolean-expression)
do-while和while唯一的区别就是do-while中的语句至少会执行一次,即便表达式第一次就被计算为false。
for:
for(initialization;Boolean-expression:step)
statement
初始化表达式,布尔表达式,步进都可以为空,每次迭代前会测试布尔表达式的值,如果结果是false就会执行for语句后面的代码行,每次循环结束会执行一次步进。
for循环经常用作计数任务
public class ListCharacters {
public static void main(String[] args) {
for(char c = 0; c < 128; c++)
if(Character.isLowerCase(c))
System.out.println("value: " + (int)c +
" character: " + c);
}
} /* Output:
value: 97 character: a
value: 98 character: b
value: 99 character: c
value: 100 character: d
value: 101 character: e
value: 102 character: f
value: 103 character: g
value: 104 character: h
value: 105 character: i
value: 106 character: j
...
*///:~
变量c实在程序用到的地方被定义的,也就是for循环的控制表达式中,而不是main()开始的地方定义的,c的作用域在for控制的表达式范围内。
逗号操作符:
java中唯一用到逗号操作符的地方是for循环的控制表达式,在控制表达式的初始化部分和步进控制部分,可以使用一系列的逗号分隔的语句,而且那些语句会独立执行。
public class CommaOperator {
public static void main(String[] args) {
for(int i = 1, j = i + 10; i < 5; i++, j = i * 2) {
System.out.println("i = " + i + " j = " + j);
}
}
} /* Output:
i = 1 j = 11
i = 2 j = 4
i = 3 j = 6
i = 4 j = 8
*///:~
四.Foreach语法
java se5 引入了一种新的更加简洁的for语法用于数组和容器,即foreach语法,也就是平时说的增强for循环,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。
例子:
public class ForEachFloat {
public static void main(String[] args) {
Random rand = new Random(47);
float f[] = new float[10];
for(int i = 0; i < 10; i++)
f[i] = rand.nextFloat();
for(float x : f)
System.out.println(x);
}
}
foreach语法可以用于任何的Iterable对象。
五.return
return关键词有两方面的用途:一方面是指定一个方法返回什么值,另一方面它会导致当前的方法退出,并返回那个值,如果void方法中没有return语句,那么在该方法结尾处会有一个隐式的return,因此在方法中并非总是需要一个return语句,但是如果一个方法声明它将返回void之外的其他东西,则必须要保证每一条代码路径都将返回一个值。
import static net.mindview.util.Print.*;
public class IfElse2 {
static int test(int testval, int target) {
if(testval > target)
return +1;
else if(testval < target)
return -1;
else
return 0; // Match
}
public static void main(String[] args) {
print(test(10, 5));
print(test(5, 10));
print(test(5, 5));
}
} /* Output:
1
-1
0
*///:~
六.break和continue
在任何迭代语句的主体部分,都可用break和continue控制循环的流程,并且break用于强制退出循环,不执行循环中剩余的部分,而continue则停止执行当前的迭代,然后退回循环起始处,开始下一次的迭代。
例子:
public class BreakAndContinue {
public static void main(String[] args) {
for(int i = 0; i < 100; i++) {
if(i == 74) break; // Out of for loop
if(i % 9 != 0) continue; // Next iteration
System.out.print(i + " ");
}
System.out.println();
// Using foreach:
for(int i : range(100)) {
if(i == 74) break; // Out of for loop
if(i % 9 != 0) continue; // Next iteration
System.out.print(i + " ");
}
System.out.println();
int i = 0;
// An "infinite loop":
while(true) {
i++;
int j = i * 27;
if(j == 1269) break; // Out of loop
if(i % 10 != 0) continue; // Top of loop
System.out.print(i + " ");
}
}
} /* Output:
0 9 18 27 36 45 54 63 72
0 9 18 27 36 45 54 63 72
10 20 30 40
*///:~
七.Switch
switch有时候被划分为一种选择语句,根据整数表达式的值,switch语句可以从一系列代码中选出一段去执行
格式如下:
switch(integral-selector){
case integral-value1 : statment; break;
case integral-value2 : statment; break;
case integral-value3 : statment; break;
case integral-value4 : statment; break;
case integral-value5 : statment; break;
default: statement;
}
其中,Integral-selector(整数选择因子)是一个能够产生整数值的表达式,switch能将这个表达式的结果与每个integral-value比较,若发现相符的,就执行对应的语句,若没有相符的就执行default语句
在上面的定义中,大家会注意到每个case均以一个break结尾,这样可使执行流程跳转至switch主体的末尾,这是构建seitch语句的一种传统方式,但break是可选的,如果省略break会继续执行后面的case语句,直到遇到一个break为止。
switch语句是实现多路选择的一种干净利落的方法,但是他要求使用一个选择因子,并且必须是int或者char那样的整数值。