跳到主要内容

流程控制语句

流程控制语句

if-else

单分支

格式

if(条件表达式){
语句块;

说明:条件表达式必须是布尔表达式(关系表达式或逻辑表达式)或 布尔变量 执行流程:

  1. 首先判断条件表达式看其结果是 true 还是 false
  2. 如果是 true 就执行语句块
  3. 如果是false就不执行语句块

20240130193848

双分支

格式:

if(条件表达式) { 
语句块1;
}else {
语句块2;
}

执行流程:

  1. 首先判断条件表达式看其结果是 true 还是 false
  2. 如果是 true 就执行语句块1
  3. 如果是 false 就执行语句块2

20240130194008

多分支条件

格式:

if (条件表达式1) {
语句块1;
} else if (条件表达式2) {
语句块2;
}
...
}else if (条件表达式n) {
语句块n;
} else {
语句块n+1;
}

说明:一旦条件表达式为true,则进入执行相应的语句块。执行完对应的语句块之后,就跳出当前结构

执行流程:

  1. 首先判断关系表达式1看其结果是 true 还是 false
  2. 如果是 true 就执行语句块1,然后结束当前多分支
  3. 如果是 false 就继续判断关系表达式2看其结果是 true 还是 false
  4. 如果是 true 就执行语句块2,然后结束当前多分支
  5. 如果是 false 就继续判断关系表达式…看其结果是 true 还是 false ...... n. 如果没有任何关系表达式为true,就执行语句块n+1,然后结束当前多分支

20240130194205

switch-case结构

语法格式:

switch(表达式){
case 常量值1:
语句块1;
//break;
case 常量值2:
语句块2;
//break;
// ...
[default:
语句块n+1;
break;
]
}

执行流程图

20240130194302

使用注意点

  • switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (jdk 5.0),String (jdk 7.0)
  • case 子句中的值必须是常量,不能是变量名或不确定的表达式值或范围
  • 同一个 switch 语句,所有 case 子句中的常量值互不相同
  • break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;如果没有 break,程序会顺序执行到 switch 结尾
  • default 子句是可选的。同时,位置也是灵活的。当没有匹配的 case 时,执行 default 语句

注意:在switch语句中,如果case的后面不写break,将出现穿透现象,也就是一旦匹配成功,不会在判断下一个case的值,直接向后运行,直到遇到break或者整个switch语句结束,执行终止

循环语句

for循环

语法格式:

for (①初始化部分; ②循环条件部分; ④迭代部分){
③循环体部分;

执行过程:①-②-③-④-②-③-④-②-③-④-.....-②

20240130194608

说明:

  • for(;;)中的两个;不能多也不能少
  • 初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
  • 循环条件部分为 boolean 类型表达式,当值为 false 时,退出循环
  • 可以有多个变量更新,用逗号分隔

while循环

语法格式:

①初始化部分
while(②循环条件部分){
③循环体部分;
④迭代部分;
}

执行过程:①-②-③-④-②-③-④-②-③-④-...-②

20240130194743

说明:

  • while(循环条件)中循环条件必须是 boolean 类型
  • 注意不要忘记声明④迭代部分。否则,循环将不能结束,变成死循环
  • for 循环和 while 循环可以相互转换。二者没有性能上的差别。实际开发中,根据具体结构的情况,选择哪个格式更合适、美观
  • for 循环与 while 循环的区别:初始化条件部分的作用域不同

do-while循环

语法格式:

①初始化部分;
do{
③循环体部分
④迭代部分
}while(②循环条件部分);

执行过程:①-③-④-②-③-④-②-③-④-...-②

20240130194930

说明:

  • 结尾while(循环条件)中循环条件必须是 boolean 类型
  • do{}while();最后有一个分号
  • do-while 结构的循环体语句是至少会执行一次,这个和 for 和 while 是不一样的
  • 循环的三个结构 for、while、do-while 三者是可以相互转换的

无限循环

语法格式: 最简单"无限"循环格式:while(true), for(;;)

适用场景:

  • 开发中,有时并不确定需要循环多少次,需要根据循环体内部某些条件,来控制循环的结束(使用break)
  • 如果此循环结构不能终止,则构成了死循环!开发中要避免出现死循环

关键字break和continue

适用范围            在循环结构中使用的作用                     相同点

break switch-case
循环结构 一旦执行,就结束(或跳出)当前循环结构 此关键字的后面,不能声明语句

continue 循环结构 一旦执行,就结束(或跳出)当次循环结构 此关键字的后面,不能声明语句

键盘输入

如何从键盘获取不同类型(基本数据类型、String 类型)的变量:使用 Scanner 类 键盘输入代码的四个步骤:

  • 导包:import java.util.Scanner;
  • 创建 Scanner 类型的对象:Scanner scan = new Scanner(System.in);
  • 调用 Scanner 类的相关方法next() / nextXxx(),来获取指定类型的变量
  • 释放资源:scan.close();

注意:需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常 导致程序终止

//① 导包
import java.util.Scanner;

public class ScannerTest1 {

public static void main(String[] args) {
//② 创建Scanner的对象
//Scanner是一个引用数据类型,它的全名称是java.util.Scanner
//scanner就是一个引用数据类型的变量了,赋给它的值是一个对象(对象的概念我们后面学习,暂时先这么叫)
//new Scanner(System.in)是一个new表达式,该表达式的结果是一个对象
//引用数据类型 变量 = 对象;
//这个等式的意思可以理解为用一个引用数据类型的变量代表一个对象,所以这个变量的名称又称为对象名
//我们也把scanner变量叫做scanner对象
Scanner scanner = new Scanner(System.in);//System.in默认代表键盘输入

//③根据提示,调用Scanner的方法,获取不同类型的变量
System.out.println("欢迎光临你好我好交友网站!");
System.out.print("请输入你的网名:");
String name = scanner.next();

System.out.print("请输入你的年龄:");
int age = scanner.nextInt();

System.out.print("请输入你的体重:");
double weight = scanner.nextDouble();

System.out.print("你是否单身(true/false):");
boolean isSingle = scanner.nextBoolean();

System.out.print("请输入你的性别:");
char gender = scanner.next().charAt(0);//先按照字符串接收,然后再取字符串的第一个字符(下标为0)

System.out.println("你的基本情况如下:");
System.out.println("网名:" + name + "\n年龄:" + age + "\n体重:" + weight +
"\n单身:" + isSingle + "\n性别:" + gender);

//④ 关闭资源
scanner.close();
}
}

获取一个随机数

Math 类的random()的调用,会返回一个[0,1)范围的一个 double 型值

Math.random() * 100 ---> [0,100) 
(int)(Math.random() * 100) ---> [0,99]
(int)(Math.random() * 100) + 5 ----> [5,104]

如何获取[a,b]范围内的随机整数呢? (int)(Math.random() * (b - a + 1)) + a