【Java启程】语句与逻辑
- 顺序结构
- 分支结构
- 循环结构
顺序结构
一般而言,程序是在main函数内从上到下逐条执行的,遵循这样的执行顺序我们称之为顺序结构。
- 用游戏的思路来理解,顺序结构可以理解为从头到尾一条主线,没有任何支线。每执行一条语句相当于过了一个剧情,紧接着唯一一个后续剧情,直到游戏结束。或者用地牢迷宫的思路来理解,把执行一条语句视为进入一个房间且每进入一个房间后返回的路会被关闭,那么顺序结构从第一个房间开始,每进入一个房间都会关闭返回的门且提供一扇向前的门,直到游戏结束或者说main函数结束。
分支结构
分支结构又称选择结构,它表示程序在执行某一语句时根据条件状态的不同从而执行不同的结果。
- 分支语句可以理解成地牢迷宫到达某一阶段时进行的条件判定,满足条件才能进入这一阶段的房间,不满足则会直接跳过这个房间。进阶一点的分支语句会根据你条件的执行情况给你开启不同的房间,可以理解为游戏进入了不同的世界线。
三元运算符可以实现较为简单的分支结构,不过本节我们主要介绍通过条件语句 if 和 switch 来实现分支结构。
- if语句
“if” 表示 “如果” ,那么显然 “if语句” 就是 “如果怎么怎么样,就怎样怎样” 的意思。 if语句常与 “else” 连用, “else” 这里理解为 “其他情况” 。完整的 if语句格式如下:
if (条件1) {
语句块1;
} else if (条件2) {
语句块2;
} ... //这里假装省略一下§(* ̄▽ ̄*)§
else if (条件n) {
语句块n;
} else {
语句块;
}
建议将 “else if” 和 “else” 直接跟在大括号后面而不是另起一行。
逐条分析一下:
if (条件1) {
语句块1;
}
这条语句是说如果条件1成立,则执行语句块1,那么显然条件1的最终结果需要告诉我们条件1成立与否,所以条件1可以是单个表达式也可以是通过运算符衔接的任意多的表达式,但它的结果必须为确定的布尔值。
语句块1只有条件成立时才会执行。若条件不成立,则跳过整个 if大括号而继续执行后续语句。
事实上,单个的 if语句块已经可以作为一个完整分支语句来执行,后续的 “else if” 块和 “else” 块均是可省略的。
需要特别说明一点,如果 if语句条件成立后执行的代码只有一行,则可以省略大括号并写成如下形式:
if (条件1) 语句1;
但是,强烈不推荐这种写法!
继续往下看代码:
else if (条件2) {
语句块2;
} ...
else if (条件n) {
语句块n;
}
我们已经说过, “else” 表 “其他情况” ,它是常与 if连用的一个词,当 if语句块成立时就根本不会执行。 “else” 不能脱离 “if” 单独出现在程序中。 “else if” 表在先前的 if条件不成立的情况下继续提出 “如果” ,再往后的 “else if” 也以此类推。
else {
语句块;
}
最后,用一个 “else” 语句块表示在上述所有 if全都不成立的情况下剩余的所有情况该执行的情况,执行完毕后程序会继续执行下面的语句。若一个大的 if结构最后没有 else语句块且所有判断条件均不成立,则程序会跳过整个 if结构直接去执行后续语句。
案例:输入一个整数,用 if语句判断该数是奇数还是偶数并输出
import java.util.Scanner; // 输入操作要导包
public class IfDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个整数:");
int number = sc.nextInt();
if (number % 2 == 0) {
System.out.println(number + "是偶数");
} else {
System.out.println(number + "是奇数");
}
}
}
- switch语句
“switch” 是 “开关,闸” 的意思。使用 switch语句的完整格式如下:
switch (表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体;
}
当 switch 后表达式的值和 case 语句后的值相同时,从该位置开始向下执行,直到遇到 break 语句或者 switch 语句块结束;如果没有匹配的 case 语句则执行 default 块的代码。switch 后面小括号中表达式的值必须是整型或字符型,case 后面的值可以是常量数值也可以是一个常量表达式,但不能是变量或带有变量的表达式。
特别说明,当一旦判定成立,则在遇到 break 语句或者 switch 语句块前程序不会从语句块里跳出。演示如下:
public class SwitchDemo {
public static void main(String[] args) {
// 判断布尔值
switch (0) {
case 0:
System.out.println(false);
case 1:
System.out.println(true);
break;
default:
System.out.println("wrong boolean");
}
}
}
其输出结果却为:
false
true
这一特性我们也能加以利用,如设置三等奖只有一件奖品,二等奖能拿到专属奖品以及三等奖的奖品,一等奖特等奖以此类推,演示代码如下:
public class SwitchDemo {
public static void main(String[] args) {
// 判断布尔值
switch (1) {
case 0: // 用 0 代指特等奖
System.out.println("你得到了特等奖品!!!!!");
case 1: // 用 1 代指一等奖
System.out.println("你得到了一等奖品!!!");
case 2: // 用 2 代指二等奖
System.out.println("你得到了二等奖品!!");
case 3: // 用 3 代指三等奖
System.out.println("你得到了三等奖品!");
break; // 获奖与不获奖是两种状态,在这里必须截止了
default: // 这个……不用说了吧。。。。。
System.out.println("你没得到奖品");
}
}
}
小声bb,在代码行后直接加备注似乎不是一个好习惯……
输出结果为:
你得到了一等奖品!!!
你得到了二等奖品!!
你得到了三等奖品!
“break” 起到跳出结构的作用。关于其特性,后续会单独展开。
循环结构
在设计程序时,有时我们不仅要面临多种情况进行选择的问题,还会面临要求某一步骤多次执行的情况,于是循环结构应运而生。
- 循环结构的具象理解就是卡剧情了,需要重复刷副本练级直到达到要求为止。
虽然循环执行的内部重复过程很枯燥,但循环结构是必要的。有时我们需要对某一步骤重复进行几十上百次或者更多,如果不使用循环结构,那么所需的代码数量是极为庞大的。
- for循环
for循环是最常用的循环结构,其格式如下:
for (初始化语句; 条件判断语句; 条件控制语句) {
循环体语句:
}
初始化语句:用于在第一次循环开始之前初始化一个循环变量,该变量只存在于该次循环中,循环结束后该变量不再存在;
条件判断语句:是循环的执行条件,每次循环前都会先判断该次循环是否满足该条件,若true则继续进行循环,若false则循环结束;
条件控制语句:用于改变变量控制条件,如每执行一次循环让循环变量加1或每执行一次循环让循环变量乘2等。
for循环条件里的三个表达式均可被省略,但相隔的 “;” 不可以被省略!
案例:用 for循环实现在控制台输出五次 “武汉加油!中国加油!”
public class ForDemo {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println("武汉加油!中国加油!");
}
}
}
- while循环
while循环也是常用的一种循环体,其格式如下:
while (条件判断语句) {
循环体语句;
条件控制语句;
}
其中条件判断语句与条件控制语句的作用同 for循环。
可见 while语句没有专属的循环变量。若要实现类似 for循环的结构,需在 while循环前自行定义一个变量充当循环变量,且该变量在循环结束后继续存在。
大多数情况下, while循环和 for循环能够实现相互转换,其区别仅在于循环变量是局部变量还是全局变量。
案例:用 while循环实现在控制台输出五次 “武汉加油!中国加油!”
public class WhileDemo {
public static void main(String[] args) {
int j = 1;
while (j <= 5) {
System.out.println("武汉加油!中国加油!");
j++;
}
}
}
- do…while循环
do… while循环有别于前两种循环,它其实是 while循环的变体,其格式如下:
do {
循环体语句;
条件控制语句;
} while (条件判断语句);
其各成分的作用同 while循环。相应的,它的循环变量也需提前定义且循环结束后会保留。
注意到这种写法的条件判断语句是在大括号后面的,而前两种循环结构的条件判断语句都是在大括号前,我们分别称之为后验循环和前验循环。后验循环的特点就是不管条件判断语句是否成立,循环都会先执行一次。
最后,注意 do…while循环的结尾处有一个 “;” 。
案例:用 while循环实现在控制台输出五次 “武汉加油!中国加油!”
public class WhileDemo {
public static void main(String[] args) {
int i = 1;
do {
System.out.println("武汉加油!中国加油!");
i++;
} while (i <= 5);
}
}