控制执行流程
1.true and false
- 所有条件语句都利用条件表达式的真假来决定执行路径
2. if-else
- 控制程序流程的最基本形式
3.迭代
语句会重复执行,直到表达式得到false
的结果为止
while
循环刚开始,会计算一次布尔表达式的值,在语句的下一次迭代开始前会再次计算一次.
格式:
while(Boolean-expression)
statement
- do-while
- for
do-while
格式:
do statement
while(Boolean-expression);
while与do-while唯一区别:do-while至少执行一次
for
格式:
for(initialization; Boolean-expression; step)
statement
初始化表达式initialization
,布尔表达式Boolean-expression
,步进step
都可以为空
练习4-素数
//
for (int i = 1; i < 500; i++) {
int factors = 0;
for (int j = 1; j < (i + 2) / 2; j++) {
if ((i % j) == 0) factors++;
}
if (factors < 2) System.out.println(i + "是素数");
}
逗号操作符
- 在java中唯一用到它的是在for循环的控制表达式中
- 在控制表达式的初始化和步进控制部分,可以使用一系列由逗号分隔的语句,这些语句均会独立执行
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*/
4.foreach语法
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);
/* Output:
0.72711575
0.39982635
0.5309454
0.0534122
0.16020656
0.57799757
0.18847865
0.4170137
0.51660204
0.73734957
*/
5.return
用法:
- 一个方法的返回值(没有void返回值)
- 退出当前方法并返回值
6.break和continue
break
强行退出循环,不执行循环中剩余语句continue
停止执行当前的迭代,开始下一次迭代
7.goto
java中没有goto,但是goto仍是java的保留字
- 起源于汇编语言
- goto语句是源码级别上的跳转
适用于for以及while的规则
- 一般的
continue
会退回最内层循环的开头(顶部),并继续执行 - 带标签的
continue
会到达标签的位置,并重新进入紧接在哪个标签后面的循环 - 一般的
break
会中断并跳出当前循环 - 带标签的
break
会中断并跳出标签所指的循环
8.switch
语法:
switch(integral-selector) {
case integral-value1 : statement; break;
case integral-value2 : statement; break;
case integral-value3 : statement; break;
case integral-value4 : statement; break;
case integral-value5 : statement; break;
// …
default: statement;
}
- 省略
break
会继续执行后面的case语句,直到遇到break为止
练习:
斐波那契数列
public class FibonacciExercise9 {
int fib(int n) {
if(n < 2) return 1;
return (fib(n - 2) + fib(n - 1));
}
public static void main(String[] args) {
FibonacciExercise9 f = new FibonacciExercise9();
int k =10;
System.out.println("First " + k + " Fibonacci number(s): ");
for(int i = 0; i < k; i++)
System.out.println(f.fib(i));
}
}
吸血鬼数字
public class VampireNumbersExercise10 {
static int a(int i) {
return i / 1000;
}
static int b(int i) {
return (i % 1000) / 100;
}
static int c(int i) {
return ((i % 1000) % 100) / 10;
}
static int d(int i) {
return ((i % 1000) % 100) % 10;
}
static int com(int i, int j) {
return (i * 10) + j;
}
static void productTest(int i, int m, int n) {
if (m * n == i) System.out.println(i + " = " + m + " * " + n);
}
public static void main(String[] args) {
for (int i = 1001; i < 9999; i++) {
productTest(i, com(a(i), b(i)), com(c(i), d(i)));
productTest(i, com(a(i), b(i)), com(d(i), c(i)));
productTest(i, com(a(i), c(i)), com(b(i), d(i)));
productTest(i, com(a(i), c(i)), com(d(i), b(i)));
productTest(i, com(a(i), d(i)), com(b(i), c(i)));
productTest(i, com(a(i), d(i)), com(c(i), b(i)));
productTest(i, com(b(i), a(i)), com(c(i), d(i)));
productTest(i, com(b(i), a(i)), com(d(i), c(i)));
productTest(i, com(b(i), c(i)), com(d(i), a(i)));
productTest(i, com(b(i), d(i)), com(c(i), a(i)));
productTest(i, com(c(i), a(i)), com(d(i), b(i)));
productTest(i, com(c(i), b(i)), com(d(i), a(i)));
}
}
}