一.选择结构
if 单分支选择结构
if-else 双分支选择结构
If-else if-else 多分支选择结构
switch 多分支选择结构
代码例子
//if -else 的例子
if(布尔表达式1) {
– 语句块1;
} else if(布尔表达式2) {
– 语句块2;
}………
else if(布尔表达式n){
– 语句块n; ▪
} else {
– 语句块n+1;
}
//swicth的例子
switch (表达式) {
case 值1:
语句序列1;
[break];
case 值2:
语句序列2;
[break];
… … … … …
[default:
默认语句;]
}
二.循环结构
while循环:先判断,后执行。
do-while循环 :先执行,后判断。
for循环
代码例子
//do-while使用例子
do{
System.out.println("第"+i+"遍输出");
i++;
}while(i<=100);
//while使用例子
int count = 0;
while(true){
int i = (int)(Math.random()*101);
if(i==88){
break;
}
count++;
System.out.println(count+"--"+i);
}
//请打印输出(1,1)(1,2)(1,3)...直到输出(6,6)停止
for(int i = 1;i<10;i++){
for(int j =1;j<10;j++){
System.out.println("("+i+","+j+")");
if(i==6&&j==6){
return;
}
}
}
/*
把100~150之间不能被3整除的数输出:
continue:跳出本次循环
*/
for(int i = 100;i<150;i++){
if(i%3==0){
continue;
}
System.out.println(i);
}
}
三.跳转语句
break : 结束循环
continue :结束这一次循环、
return:从当前方法退出,返回到调用该方法的诧句处
▪ 使用场合
– break可用亍switch结构和循环结构中
– continue叧能用亍循环结构中、
– return 任何诧句中,结束当前方法,和循环其实没有什么关系
▪ 作用(循环结构中)
– break诧句终止某个循环,程序跳转到循环块外的下一条诧句。
– continue跳出本次循环,迚入下一次循环
四.语句块
语句块(有时叫做复合语句),是用花括号扩起的任意数量的简单Java语句。块确定了局部变量的作用域。块中的程序代码,作为一个整体,是要被一起执行的。块可以被嵌套在另一个块中,但是不能在两个嵌套的块内声明同名的变量。语句块可以使用外部的变量,而外部不能使用语句块中定义的变量,因为语句块中定义的变量作用域只限于语句块。
public class Test19 {
public static void main(String[] args) {
int n;
int a;
{
int k;
int n; //编译错误:不能重复定义变量n
} //变量k的作用域到此为止
}
}
五.递归思想
什么是递归(recursion)
– 程序调用自身的编程技巧称为递归。
– 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法
递归问题的特点
– 一个问题可被分解为若干层简单的子问题
– 子问题和其上层问题的解决方案一致
– 外层问题的解决依赖亍子问题的解决
递归结构包括两个部分:
– 递归结束条件。解答:什么时候丌调用自身方法。如果没有条件,将陷入死循环。
– 递归体。解答:什么时候需要调用自身方法。
总结
– 程序调用自身的编程技巧称为递归。
– 递归简单,但是内存耗用多,速度要比循环慢
– 任何可用递归解决的问题也能使用循环解决,反之不见得
public class Test2 {
public static void main(String[] args) {
long d1 = System.currentTimeMillis();
System.out.printf("%d阶乘的结果:%s%n", 10, factorial(10));
long d2 = System.currentTimeMillis();
System.out.printf("递归费时:%s%n", d2-d1); //耗时:32ms
}
/** 求阶乘的方法*/
static long factorial(int n){
if(n==1){//递归头
return 1;
}else{//递归体
return n*factorial(n-1);//n! = n * (n-1)!
}
}
}