程序逻辑控制

目录

1.顺序结构

2.分支结构

2.1 if语句

2.2 if-else语句

2.3 switch语句

3. 循环结构

3.1 for循环

3.2while循环

3.3 do-while循环

3.4 特例:增强型for循环(for - each)


1.顺序结构

顺序结构也就是按照代码的顺序一行一行执行。

public class Main{
    public static void main(String[] args){
        System.out.println("123");    //输出123
        System.out.println("abc");    //abc
        System.out.println("我爱中国");//我爱中国
    }

}

2.分支结构

分支结构也称做选择结构

2.1 if语句

语法格式

当布尔表达式结果为真(true)时执行if语句,否则不执行。

在java中if语句的条件必须是一个布尔表达式(true或false),不能是其他类型(比如整数或字符串)。

例如:

if(x>10){    //正确
    //do something
}
if(x=10){    //错误:这是赋值操作,不是条件判断
    //do something
}

避免多余的if嵌套

//不推荐
if(x > 10){
    if(y < 20){
        //do something
    }
}

//推荐
if(x > 10 && y < 20){
    //do something
}

2.2 if-else语句

语法格式

表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3

注意条件的顺序:

(1)条件的顺序会影响程序的逻辑。应该把最可能成立的条件放在前面,或者把范围小的条件放在前面。

//不推荐
if( x > 0){
    //do something
}else if( x > 10){    //这个条件永远不会被执行
    //do something
}

//推荐
if( x > 10){
    //do something
}else if( x >0){
    //do something
}

(2)悬垂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.3 switch语句

语法格式

执行流程:

1. 先计算表达式的值。

2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束。

3. 当表达式的值没有与所列项匹配时,执行default。

注意事项

不要忘记break:
如果没有break,程序会继续执行后面的case,直到遇到break或switch结束。这种现象称为“case穿透”。

在case后面不一定要加{ },不加{ }它并不执行一条语句,而是从匹配到case开始执行,直到遇到break或者switch结束。

int x=1;
switch(x){
    case 1:
        System.out.println("x is 1");
        //忘记写break
    case 2:
        System.out.println("x is 2");//这行也会被执行
        break;
}

default不是必须的,但建议加上:
default用于处理未匹配到任何case的情况。虽然不是必须的,但加上可以提高代码的健壮性。

switch(x){
    case 1:
        System.out.println("x is 1");
        break;
    default:
        System.out.println("x is unknown");//处理未知情况
}

多个case后的常量值不可以重复 switch的括号内只能是以下类型的表达式:

基本类型:byte、char、short、int,注意不能是float、double、long类型。

引用类型:String常量串、枚举类型。

3. 循环结构

3.1 for循环

语法格式

表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次。

表达式2: 循环条件,满则循环继续,否则循环结束 。

表达式3: 循环变量更新方式。

例如:

//计算1-10的和
int sum = 0;
for(int i=1;i <=10;i++){
    sum+=i;
}

注意事项

1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句。建议还是加上 { }。

2. 和 if 类似, for 后面的 { 建议和 while 写在同一行。

3. 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行。

4. 和while循环一样,结束单趟循环用continue,结束整个循环用break。

3.2while循环

语法格式

循环条件为 true, 则执行循环语句; 否则结束循环。

特点:先判断条件,后执行循环体。适合不确定循环次数的情况(如读取用户输入直到有效值)。
可能零次执行:若初始条件不满足,循环体不执行。

例如:

//处理用户输入直到正数
Scanner sc=new Scanner(System.in);
    int num;
    while((num=sc.nextInt())<=0){
        System.out.println("请重新输入正数:");
}

注意事项

1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }。

2. 和 if 类似, while 后面的 { 建议和 while 写在同一行。

3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行.

3.3 do-while循环

语法格式

特点:先执行一次循环语句,再判断条件。适合至少需执行一次的场景(如菜单显示)。
至少执行一次:即使初始条件不满足。

例如:

//打印1-10
int num = 1;
do {
    System.out.println(num);
    num++;
} while (num <= 10);

注意事项

1. do while 循环最后的分号不要忘记 。

2. 一般 do while 很少用到, 更推荐使用 for 和 while。

3.4 特例:增强型for循环(for - each)

语法格式

用途:简化数组/集合遍历。

限制:无法直接获取索引,不能修改原集合元素(对数组的修改可能影响原数据)。

元素类型:数组或集合中元素的类型(如 intString 或自定义对象类型)。

变量名:临时变量,表示当前遍历到的元素。

数组或集合:需要遍历的目标数据结构。

使用示例:

int[] numbers = {1, 2, 3, 4, 5};

// 传统 for 循环
for (int i = 0; i < numbers.length; i++) {
    System.out.println(numbers[i]);
}

// for-each 循环(更简洁)
for (int num : numbers) {
    System.out.println(num);
}

注意事项

  1. 只读遍历

    (1)  for-each 循环的变量是只读的,不能直接修改数组或集合的结构(例如删除或添加元素)(2)若需要在遍历时修改集合,应使用传统的 for 循环或迭代器(Iterator)。
  2. 索引不可见

    (1)for-each 循环隐藏了索引,若需要访问当前元素的索引,需使用传统 for 循环。
  3. 适用对象

    (1)所有实现了 Iterable 接口的类(如 ListSet)以及数组均可使用 for-each。

希望这篇博客能帮助你轻松理解Java的核心基础!如有疑问,欢迎留言讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值