1.顺序结构

按照代码书写的顺序一行一行执行

System.out.println("aaa");
 System.out.println("bbb");
 System.out.println("ccc");
 // 运行结果
 aaa
 bbb
 ccc

2.分支结构

if 语句

基本语法形式1

if(布尔表达式){
//条件满足时执行代码
}


基本语法形式2

if(布尔表达式){
//条件满足时执行代码
}else{
//条件不满足时执行代码
}


基本语法形式3 多分支的情况

if(布尔表达式){
//条件满足时执行代码
}else if(布尔表达式){
//条件满足时执行代码
}else{
//条件都不满足时执行代码
}

示例:

1.判定一个数字是奇数还是偶数

int num = 10;
 if (num % 2 == 0) {
 System.out.println("num 是偶数");
 } else {
 System.out.println("num 是奇数");
 }

 

2.判定一个数字是正数还是负数

int num = 10;
 if (num > 0) {
 System.out.println("num 是正数");
 } else if (num < 0) {
 System.out.println("num 是负数");
 } else {
 System.out.println("num 是 0");
 }

注意事项1: 悬垂 else 问题

int x = 10;
 int y = 10;
 if (x == 10)
         if (y == 10)
                 System.out.println("aaa");
 else
         System.out.println("bbb");

if / else 语句中可以不加 大括号 . 但是也可以写语句(只能写一条语句). 此时 else 是和最接近的 if 匹配.
但是实际开发中我们 不建议 这么写. 最好加上大括号

注意事项2 代码风格问题

// 风格1
 int x = 10;
 if (x == 10) {
 // 满足条件
 } else {
 // 不满足条件
 } // 风格2
 int x = 10;
 if (x == 10)
 {
 // 满足条件
 }
 else
 {
 // 不满足条件
 }

虽然两种方式都是合法的, 但是 Java 中更推荐使用风格1, { 放在 if / else 同一行.
 

switch 语句

基本语法

switch(整数|枚举|字符|字符串){
        case 内容1 : {
                内容满足时执行语句;
                [break;]
                }
        case 内容2 : {
                内容满足时执行语句;
                [break;]
                }
        ...
        default:{
                内容都不满足时执行语句;
                [break;]
                }

}

示例:

根据 day 的值输出星期

int day = 1;
 switch(day) {
         case 1:
         System.out.println("星期一");
         break;
 case 2:
         System.out.println("星期二");
         break;
 case 3:
         System.out.println("星期三");
         break;
 case 4:
         System.out.println("星期四");
         break;
 case 5:
         System.out.println("星期五");
         break;
 case 6:
         System.out.println("星期六");
         break;
 case 7:
         System.out.println("星期日");
         break;
 default:
         System.out.println("输入有误");
         break;
 }

根据 switch 中值的不同, 会执行对应的 case 语句. 遇到 break 就会结束该 case 语句.
如果 switch 中的值没有匹配的 case, 就会执行 default 中的语句.
我们建议一个 switch 语句最好都要带上 default.
 

注意事项1 break 不要遗漏, 否则会失去 "多分支选择" 的效果
 

nt day = 1;
 switch(day) {
         case 1:
                 System.out.println("星期一");
                 // break;
         case 2:
                 System.out.println("星期二");
                 break;
 }
// 运行结果
 星期一
 星期二

我们发现, 不写 break 的时候, case 语句会依次向下执行, 从而失去了多分支的效果.

注意事项2 switch 中的值只能是 整数|枚举|字符|字符串
 

double num = 1.0;
         switch(num) {
                 case 1.0:
                         System.out.println("hehe");
                         break;
                 case 2.0:
                         System.out.println("haha");
                         break;
 } // 编译出错
 Test.java:4: 错误: 不兼容的类型: 从double转换到int可能会有损失
 switch(num) {
 ^
 1 个错误

注意事项3 switch 不能表达复杂的条件

// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
 // 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示.
 if (num > 10 && num < 20) {
         System.out.println("hehe");
 }

注意事项4 switch 虽然支持嵌套, 但是很丑~

int x = 1;
 int y = 1;
 switch(x) {
         case 1:
                 switch(y) {
                         case 1:
                                 System.out.println("hehe");
                                 break;
                 }
                 break;
         case 2:
                 System.out.println("haha");
                 break;
 }

代码的美观程度也是一个重要的标准. 毕竟这是看脸的世界.

3.循环结构

while循环

基本语法格式

while(循环条件){
        循环语句;
}

循环条件为 true, 则执行循环语句; 否则结束循环
 

示例:

//打印 1 - 10 的数字
 int num = 1;
 while (num <= 10) {
         System.out.println(num);
         num++;
 }//计算 1 - 100 的和

int n = 1;
 int result = 0;
 while (n <= 100) {
         result += n;
         n++;
 }
 System.out.println(num); // 执行结果
 5050// 计算 5 的阶乘

int n = 1;
 int result = 1;
 while (n <= 5) {
         result *= n;
         n++;
 } System.out.println(num);
 // 执行结果
 120//计算 1! + 2! + 3! + 4! + 5!
 int num = 1;
 int sum = 0;
 // 外层循环负责求阶乘的和
 while (num <= 5) {
         int factorResult = 1;
         int tmp = 1;
 // 里层循环负责完成求阶乘的细节.
 while (tmp <= num) {
         factorResult *= tmp;
         tmp++;
 }
         sum += factorResult;
         num++;
 }
 System.out.println("sum = " + sum);

break

break 的功能是让循环提前结束.

示例:

//找到 100 - 200 中第一个 3 的倍数

int num = 100;
 while (num <= 200) {
         if (num % 3 == 0) {
         System.out.println("找到了 3 的倍数, 为:" + num);
         break;
         }
         num++;
 } // 执行结果
 找到了 3 的倍数, 为:102

执行到 break 就会让循环结束.

continue

continue 的功能是跳过这次循环, 立即进入下次循环

//找到 100 - 200 中所有 3 的倍数
 int num = 100;
 while (num <= 200) {
         if (num % 3 != 0) {
                 num++; // 这里的 ++ 不要忘记! 否则会死循环.
                 continue;
         }
         System.out.println("找到了 3 的倍数, 为:" + num);
         num++;
 }

执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句

for循环
 

基本语法
 

for(表达式1;表达式2;表达式3){
        循环体;
}

相比于 while 循环, for 循环将这三个部分合并在一起, 写代码时不容易遗漏
 

示例:

//打印 1 - 10 的数字

for (int i = 1; i <= 10; i++) {
         System.out.println(i);
 }

//计算 1 - 100 的和

int sum = 0;
 for (int i = 1; i <= 100; i++) {
 sum += i;
 }
 System.out.println("sum = " + sum);
 // 执行结果
 5050
 //计算 5 的阶乘

int result = 0;
 for (int i = 1; i <= 5; i++) {
 result *= i;
 }
 System.out.println("result = " + result); //计算 1! + 2! + 3! + 4! + 5!
int sum = 0;
 for (int i = 1; i <= 5; i++) {
         int tmp = 1;
         for (int j = 1; j <= i; j++) {
                 mp *= j;
         }
         sum += tmp;
 }
 System.out.println("sum = " + sum);

do while 循环

基本语法

do{
        循环语句;
}while(循环条件);

先执行循环语句, 再判定循环条件
 

示例:

//打印 1 - 10

int num = 1;
 do {
         System.out.println(num);
         num++;
 } while (num <= 10);

1. do while 循环最后的分号不要忘记
2. 一般 do while 很少用到, 更推荐使用 for 和 while.