1. 顺序结构
顺序结构就是程序从上到下
运行的 ,表达式语句都是顺序执行的 。
并且上一行对某个变量的修改对下一行会产生影响
2. 分支语句
2.1 if-else 条件判断结构
基本语法 :
结构 1:单分支条件判断:if
格式:
if(条件表达式){
语句块;
}
说明:
条件表达式必须是布尔表达式(关系表达式或逻辑表达式)或 布尔变量。
执行流程:
- 首先判断条件表达式看其结果是 true 还是 false
- 如果是 true 就执行语句块
- 如果是 false 就不执行语句块
结构 2:双分支条件判断:if...else
格式:
if(条件表达式) {
语句块1;
}else {
语句块2;
}
执行流程:
- 首先判断条件表达式看其结果是 true 还是 false
- 如果是 true 就执行语句块 1
- 如果是 false 就执行语句块 2
结构 3:多分支条件判断:if...else if...else
格式:
if (条件表达式1) {
语句块1;
} else if (条件表达式2) {
语句块2;
}
...
}else if (条件表达式n) {
语句块n;
} else {
语句块n 1;
}
说明:
一旦条件表达式为 true,则进入执行相应的语句块。执行完对应的语句块之后,就跳出当前结构。
执行流程:
- 首先判断关系表达式 1 看其结果是 true 还是 false
- 如果是 true 就执行语句块 1,然后结束当前多分支
- 如果是 false 就继续判断关系表达式 2 看其结果是 true 还是 false
- 如果是 true 就执行语句块 2,然后结束当前多分支
- 如果是 false 就继续判断关系表达式…看其结果是 true 还是 false
…
n. 如果没有任何关系表达式为 true,就执行语句块 n 1,然后结束当前多分支
2.2 switch-case 选择结构
基本语法 :
语法格式:
代码语言:javascript复制switch(表达式){
case 常量值1:
语句块1;
//break;
case 常量值2:
语句块2;
//break;
// ...
[default:
语句块n 1;
break;
]
}
执行流程图:
执行过程:
第 1 步:根据 switch 中表达式的值,依次匹配各个 case。如果表达式的值等于某个 case 中的常量值,则执行对应 case 中的执行语句。
第 2 步:执行完此 case 的执行语句以后
** 情况 1:如果遇到 break,则执行 break 并跳出当前的 switch-case 结构**
代码语言:javascript复制**情况2:如果没有遇到break,则会继续执行当前case之后的其它case中的执行语句。--->case穿透**
...
**直到遇到break关键字或执行完所有的case及default的执行语句,跳出当前的switch-case结构**
使用注意点:
- switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (jdk 5.0),String (jdk 7.0);
- case 子句中的值必须是常量,不能是变量名或不确定的表达式值或范围;
- 同一个 switch 语句,所有 case 子句中的常量值互不相同;
- break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;如果没有 break,程序会顺序执行到 switch 结尾;
- default 子句是可选的。同时,位置也是灵活的。当没有匹配的 case 时,执行 default 语句。
case 的穿透性:
- 在 switch 语句中,如果 case 的后面不写 break,将出现穿透现象,也就是一旦匹配成功,不会在判断下一个 case 的值,直接向后运行,直到遇到 break 或者整个 switch 语句结束,执行终止。
2.3 if-else 语句与 switch-case 语句比较
- 结论:凡是使用 switch-case 的结构都可以转换为 if-else 结构。反之,不成立。
- 开发经验:如果既可以使用 switch-case,又可以使用 if-else,建议使用 switch-case。因为效率稍高。
- 细节对比:
- if-else 语句优势
- if 语句的条件是一个布尔类型值,if 条件表达式为 true 则进入分支,可以用于范围的判断,也可以用于等值的判断,
使用范围更广
。 - switch 语句的条件是一个常量值(byte,short,int,char,枚举,String),只能判断某个变量或表达式的结果是否等于某个常量值,
使用场景较狭窄
。
- if 语句的条件是一个布尔类型值,if 条件表达式为 true 则进入分支,可以用于范围的判断,也可以用于等值的判断,
- switch 语句优势
- 当条件是判断某个变量或表达式是否等于某个固定的常量值时,使用 if 和 switch 都可以,习惯上使用 switch 更多。因为
效率稍高
。当条件是区间范围的判断时,只能使用 if 语句。 - 使用 switch 可以利用
穿透性
,同时执行多个分支,而 if...else 没有穿透性。
- 当条件是判断某个变量或表达式是否等于某个固定的常量值时,使用 if 和 switch 都可以,习惯上使用 switch 更多。因为
- if-else 语句优势
3. 循环语句
- 理解:循环语句具有在
某些条件
满足的情况下,反复执行
特定代码的功能。 - 循环结构分类:
- for 循环
- while 循环
- do-while 循环
- 循环结构
四要素
:- 初始化部分
- 循环条件部分
- 循环体部分
- 迭代部分
4. 关键字 break 和 continue
代码语言:javascript复制 适用范围 在循环结构中使用的作用 相同点
break switch-case
循环结构 一旦执行,就结束(或跳出)当前循环结构 此关键字的后面,不能声明语句
continue 循环结构 一旦执行,就结束(或跳出)当次循环结构 此关键字的后面,不能声明语句
此外,很多语言都有 goto 语句,goto 语句可以随意将控制转移到程序中的任意一条语句上,然后执行它,但使程序容易出错。Java 中的 break 和 continue 是不同于 goto 的。
5. Scanner : 键盘输入功能的实现
- 如何从键盘获取不同类型(基本数据类型、String 类型)的变量:使用 Scanner 类。
- 键盘输入代码的四个步骤:
- 导包:
import java.util.Scanner;
- 创建 Scanner 类型的对象:
Scanner scan = new Scanner(System.in);
- 调用 Scanner 类的相关方法(
next() / nextXxx()
),来获取指定类型的变量 - 释放资源:
scan.close();
- 导包:
- 注意:需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常 导致程序终止。
6. 如何获取一个随机数
如何产生一个指定范围的随机整数?
1、Math 类的 random()的调用,会返回一个[0,1)范围的一个 double 型值
2、Math.random() * 100 ---> [0,100)
代码语言:javascript复制**(int)(Math.random() * 100)---> [0,99]**
(int)(Math.random() * 100) 5 ----> [5,104]
3、如何获取[a,b]
范围内的随机整数呢?(int)(Math.random() * (b - a 1)) a
4、举例
代码语言:javascript复制class MathRandomTest {
public static void main(String[] args) {
double value = Math.random();
System.out.println(value);
//[1,6]
int number = (int)(Math.random() * 6) 1; //
System.out.println(number);
}
}