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.