Java 基础 (二)
2.流程控制语句
流程控制语句分为:顺序结构、选择结构、循环结构
2.1 顺序结构
顺序结构即代码按照从上往下的顺序依次执行
2.2 选择结构
2.2.1 if
/*
* if语句第一种:
* if (关系表达式) {
* 语句体;
* }
*
* 执行流程:
* 1.计算关系表达式的值
* 2.若结果是true则执行语句体
* 3.若结果是flase则不执行语句体
*
*/
int a = 10;
int b = 10;
if (a > b) {
System.out.println("a大于b");
}
System.out.println("...........");
if (a == b) {
System.out.println("a等于b");
}
2.2.2 if-else
/*
* if语句第二种:
* if (关系表达式) {
* 语句体1;
* } else {
* 语句体2;
* }
*
* 执行流程:
* 1.计算关系表达式的值
* 2.若结果是true则执行语句体1
* 3.若结果是flase则执行语句体2
*
*/
int year = 2020;
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
System.out.println("闰年");
} else {
System.out.println("普通年份");
}
/**
*
* 如果执行语句比较简单的话,可以使用三元运算符来代替 if-else 语句
* 如果条件为 true,返回 ? 后面 : 前面的值;如果条件为 false,返回 : 后面的值
*
*/
int num = 13;
String result = (num % 2 == 0) ? "偶数" : "奇数";
System.out.println(result);
2.2.3 if-else if-else
/*
* if语句第二种:
* if (关系表达式1) {
* 语句体1;
* }
* else if (关系表达式2) {
* 语句体2;
* }
* ......
* else {
* 语句体n;
* }
*
* 执行流程:
* 1.计算关系表达式1的值
* 2.若结果是true,则执行语句体1
* 3.若结果是flase,则计算关系表达式2的值
* 4.若结果是true,则执行语句体2
* 5.若结果是flase,则继续关系表达式
* 6.直到前面所有关系表达式结果都为false,则执行语句n
*
*/
int a = 10;
int b = 10;
if (a > b) {
System.out.println("a大于b");
} else if (a == b) {
System.out.println("a等于b");
} else {
System.out.println("a小于b");
}
2.2.4 switch
/* switch语句格式:
* switch(表达式) {
* case 值1:
* 语句体1;
* break;
* case 值2:
* 语句体1;
* break;
* ......
* default:
* 语句体n+1;
* break;
* }
*
* 注:表达式只可以是 byte, short, int, char 或者对应的包装器类型 Byte、Short、Integer、Long
* JDK5以后可以是枚举,JDK7以后可以是字符串
*
* 执行流程:
* 1.计算表达式的值
* 2.将得到的值依次与 case 后的值进行匹配,一旦匹配成功则执行相应的语句体,遇到 break 则结束
* 3.若是都不匹配,则执行语句体 n+1 ,遇到 break 则结束
*
*/
switch(a) {
case 1:
System.out.println("匹配值1成功");
break;
case 2:
System.out.println("匹配值2成功");
break;
case 3:
System.out.println("匹配值3成功");
break;
default:
System.out.println("未匹配值");
break;
}
/**
* 变量可以有 1 个或者 N 个值
* 值类型必须和变量类型是一致的,并且值是确定的
* 值必须是唯一的,不能重复,否则编译会出错
* break 关键字是可选的,如果没有,则执行下一个 case,如果有,则跳出 switch 语句
* default 关键字也是可选的
*
*/
// 枚举
public class SwitchEnumDemo {
public enum FruitTypes {
APPLE,
STRAWBERR,
BANANA,
PINEAPPLE,
UNKNOWN
}
private static String eatFruit(FruitTypes fruit) {
switch (fruit) {
case APPLE:
return "苹果";
case STRAWBERR:
return "草莓";
case BANANA:
return "香蕉";
case PINEAPPLE:
return "菠萝";
case UNKNOWN:
throw new IllegalArgumentException("未知");
default:
throw new IllegalArgumentException("水果类型: " + fruit);
}
}
public static void main(String[] args) {
System.out.println("我喜欢吃" + eatFruit(FruitTypes.PINEAPPLE));
}
}
2.3 循环结构
2.3.1 普通for
/*
* for循环语句的格式:
* for(初始化语句;判断条件语句;控制条件语句){
* 循环体语句;
* }
*
* 执行流程:
* 1.执行初始化语句
* 2.执行判断条件语句
* 3.为 true 执行循环体语句,然后继续执行4,5;为 false 则跳出循环
* 4.执行控制条件语句(自增/自减)
* 5.回到2继续执行判断条件语句,直至其结果为 false 跳出循环
*
*/
int sum = 0;
for(int i = 1;i <= 10;i++){
sum += i;
}
System.out.println("sum:" + sum);
// sum:55
- 初始化语句可以缺省,但必须在循环体外定义
- 判断条件语句不可缺省,否则无限循环
- 控制条件语句可以缺省,但同样必须在循环体内定义
2.3.2 增强for
/*
* for(元素类型 元素 : 数组或集合){
* 循环体语句;
* }
*
*/
String[] strs = {"Hello", "World"};
for (String str : strs) {
System.out.println(str);
}
// Hello
// World
2.3.3 while
/*
* while循环语句的格式:
* while(判断条件语句){
* 循环体语句;
* 控制条件语句;
* }
* 执行流程:
* 1.执行判断条件语句
* 2.为 true 时执行循环体语句,继续执行3;为 false 则跳出循环
* 3.执行控制条件语句
* 4.回到1继续执行判断条件语句,直至结果为 false 时跳出循环
*
*/
int i = 0;
while (true) {
i += 1;
System.out.println(i);
if (i == 5) {
break;
}
}
// 注意:把 while 的条件设置为 true,并且循环体中没有 break 关键字的话,程序一旦运行起来,就根本停不下来了,除非强制停止
2.3.4 do-while
/*
* do...while循环语句的格式:
* do {
* 循环体语句;
* 控制条件语句;
* } while(判断条件语句);
*
* 执行流程:
* 1.先执行循环体语句
* 2.执行控制条件语句
* 3.执行判断条件语句
* 4.结果为 true 时回到1继续执行,为 false 则跳出循环
*
*/
int i = 0;
do {
i++;
System.out.println(i);
if (i == 5) {
break;
}
} while (true);
- 当需要for 循环或者 (do)while 循环中立即跳转到下一个循环时,就可以使用 continue 关键字,通常用于跳过指定条件下的循环体,如果循环是嵌套的,仅跳过当前循环
- 选择结构与循环结构可以相互嵌套
有任何错误请指正,谢谢您的阅读,希望对您有所帮助。