Java流程控制

流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。

顺序结构

程序从上到下逐行执行,中间不存在任何跳转或判断

例如:

public class serviceImpl implements service{
    char c=65536;
    boolean a;
    static void show(){

    }
    public boolean getParam(){
        return a;
    }
}

分支结构

根据条件,选择性的执行某段代码

if-else

if-else if-else

public class AgeTest{
  public static void main(String args[]){
    int age = 75;
    if (age< 0) {
      System.out.println("不可能!");
    } else {
      System.out.println(“人家芳龄 " + age +" ,马马乎乎啦!");
    }
  }
}
public class AgeTest{
  public static void main(String args[]){
    int age = 75;
    if (age< 0) {
      System.out.println("不可能!");
    } else if (age>250) {
      System.out.println("是个妖怪!");
    } else {
      System.out.println(“人家芳龄 " + age +" ,马马乎乎啦!");
    }
  }
}

switch-case

switch(表达式){
  case 常量1:
    语句1;
    // break;
  case 常量2:
    语句2;
    // break;
  … …
  case 常量N:
    语句N;
    // break;
  default:
    语句;
    // break;
} 
public class SwitchTest {
  public static void main(String args[]) {
    int i = 1;
    switch (i) {
      case 0:
        System.out.println("zero");
        break;
      case 1:
        System.out.println("one");
        break;
      default:
        System.out.println("default");
        break;
    }
  }
}
  • switch(表达式)中表达式的值必须是下述几种类型之一:byte,short, char,int,枚举 (jdk 5.0),String (jdk 7.0);

  • case子句中的值必须是常量,不能是变量名或不确定的表达式值;

  • 同一个switch语句,所有case子句中的常量值互不相同;

  • break语句用来在执行完一个case分支后使程序跳出switch语句块;如 果没有break,程序会顺序执行到switch结尾

  • default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时, 执行default

循环结构

根据循环条件,重复执行某段代码

  • 循环语句的四个组成部分

    • 初始化部分(init_statement)

    • 循环条件部分(test_exp)

    • 循环体部分(body_statement)

    • 迭代部分(alter_statement)

for循环

语法:

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

执行过程:

①-②-③-④-②-③-④-②-③-④-…-②

说明:

  • ②循环条件部分为boolean类型表达式,当值为false时,退出循环

  • ①初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔

  • ④可以有多个变量更新,用逗号分隔

public class ForLoop {
  public static void main(String args[]) {
    int result = 0;
    for (int i = 1; i <= 100; i++) {
      result += i;
    }
    System.out.println("result=" + result);
  }
}
while循环
①初始化部分
while(②循环条件部分){
   ③循环体部分;
   ④迭代部分;
}

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

注意:

  • 不要忘记声明④迭代部分。否则,循环将不能结束,变成死循环。

  • for循环和while循环可以相互转换

public class WhileLoop {
  public static void main(String args[]) {
    int result = 0;
    int i = 1;
    while (i <= 100) {
      result += i;
      i++;
    }
    System.out.println("result=" + result);
  }
}
do-while循环
①初始化部分;
do{
  ③循环体部分 ④迭代部分
}while(②循环条件部分);


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

说明:

  • do-while循环至少执行一次循环体。
public class DoWhileLoop {
  public static void main(String args[]) {
    int result = 0, i = 1;
    do {
      result += i;
      i++;
    } while (i <= 100);
    System.out.println("result=" + result);
  }
}

总结:

  • 分支结构和循环结构都支持嵌套使用,在分支结构中使用分支结构,在循环结构中使用循环结构这样

  • 也可以在分支结构中使用循环结构,在循环结构中使用分支结构
    在这里插入图片描述

增强for循环

在Java5后,Java提供了一种更加简单的循环:foreach循环(也叫:增强for循环),这种循环遍历数组和集合更加简洁。

  • 无需获取数组和集合的长度

  • 无需根据索引来访问数组元素和集合元素

  • 无需循环条件

  • 无需迭代语句

语法格式:

//type是数组/集合元素的类型
//variableName是形参--需要命名
//array:数组名 collection:集合名
for(type variableName:array|collection){
  //循环体
}

举个例子:

boolean[] b={true,true,true,true,false,true,true};
for (boolean bl : b) {
    System.out.println(bl);
}
List<String> strList=new ArrayList<>();
strList.add("李白");
strList.add("杜甫");
strList.add("白居易");
strList.add("李牧");
for (String s : strList) {
    System.out.println(s);
}

foreach在循环过程中,循环变量相当于一个临时变量,系统会把数组或集合中的元素依次赋值给这个临时变量,而这个临时变量并不是数组元素,只是保存了数组元素的值,如果希望改变数组元素的值,不能使用foreach循环

控制循环结构

Java语言没有提供goto语句来控制程序的跳转,goto语句虽然提高了程序流程的可读性,但是降低了程序流程控制的灵活性

Java使用continue和break来控制循环语句,return虽然是用来结束整个方法的,但是当满足某种功能的情况下,也可以看作是结束了这个循环。

使用break结束循环

当某种条件满足的情况下,为了强制终止循环,执行循环外的语句,不能等到循环条件为false的时候终止循环,使用break可以满足这样的需求,对于嵌套循环,只能终止当前所在循环,不能终止外层循环。

举个例子:

public static void main(String[] args) {
        boolean[] b={true,true,true,true,false,true,true};
        boolean flag=true;
        for (int i = 0; i < b.length; i++) {
            System.out.println("b的值:"+b[i]);
            if (!b[i]) {
                flag=b[i];
                break;
            }
        }
        serviceImpl service=new serviceImpl();
        service.setLike(flag);
        System.out.println(service.getLike());
}

对于嵌套循环,默认是结束break所在循环,但是也可以通过标签的方式,来控制结束第几层循环,甚至是最外层循环。

举个例子:

for (int i = 0; i < 10; i++) {
    //想要在那个循环位置结束,就在哪个循环前加上`标签:`
    out:for (int j = 0; j < 5; j++) {//j永远都是0,因为第一次进去遍历k=2就会重新开始
        for (int k = 0; k < 4; k++) {
            if(k==2){
                //添加标签
                break out;
            }
        }
    }
}

注意事项:

  • 使用break 标签的方式,标签:定义在break当前所在循环的外层任意循环,即为有效标签,如果定义在当前break所在循环,则为无效标签

  • break是终止循环,不再执行此循环,除非外层循环再去循环调用这个循环,这个循环会重新开始

使用continue结束本次循环

continue用于结束本次循环,忽略continue后面的语句,进入下一次循环

continue也可以使用标签来控制结束哪层循环的当前次数

for (int i = 0; i < 5; i++) {
    System.out.println("i="+i);
    out:for (int j = 0; j < 2; j++) {
        System.out.println("j="+j);
        for (int k = 0; k < 2; k++) {
            //永远无法输出k=1
            if(k==1){
                continue out;
            }
            System.out.println("k="+k);
        }
    }
}
使用return结束方法

return关键字用于结束一个方法,并不用于结束循环,当一个方法执行到return 语句,这个方法将会结束,不管外面多少层循环,所以其并不能称为控制循环的关键字,但是有控制循环结束的效果。

for (int i = 0; i < 5; i++) {
    System.out.println("i="+i);
    for (int j = 0; j < 2; j++) {
        System.out.println("j="+j);
        for (int k = 0; k < 2; k++) {
            //当k=1时返回当前k值
            if(k==1){
                return k;
            }
            System.out.println("k="+k);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carl·杰尼龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值