java基础(二):流程控制与数组

四、流程控制与数组

4.1、顺序结构:程序从上到下,一行一行执行。

4.2、分支结构:

  4.2.1、if条件语句:

  使用 布尔表达式 或 布尔值 作为分支条件来进行分支控制。

  注意1:使用 if else 语句基本规则:总是优先把包含范围小的条件放在前面处理

1)、if(){...},
2)、if(){...}else{...},
3)、if(age>60){
      System.out.println("老年人");
    }else if(age>40){
      System.out.println("中年人");
    }else if(age>20){
      System.out.println("青年人");
    } 
等同于:
    if(age>60){
      System.out.println("老年人");
    }else if(age>40 && !(age>60)){ //else的含义是"否则",隐含条件是:对前面的条件取反
      System.out.println("中年人"); 
    }else if(age>20 &&!(age>60) && !(age>40 && !(age>60)){ //else的含义是"否则",隐含条件是:对前面的条件取反
      System.out.println("青年人"); 
    } 

 

  4.2.2、switch分支语句:

  switch语句由一个控制表达式和多个case标签组成。

  注意1:控制表达式的数据类型只能是byte、short、char、int 四种整数类型,枚举类型 和 String类型(从Java 7才允许)。

  注意2case后面的break不要省略,否则会继续执行后面的代码(不会再去判断后面的case、default条件)。

public class TestSwitch{
    public static void main(){
        char score = 'C';
        switch(score){
            case 'A':
                System.out.println("优秀");
                break;
            case 'B':
                System.out.println("良好");
                break;
            case 'C':
                System.out.println("一般");
                break;
            case 'D':
                System.out.println("及格");
                break;
            case 'E':
                System.out.println("不及格");
                break;
            default:
                System.out.println("输入有误");
        }
    }  
}        

 

 4.3、循环结构

  4.3.1、while、do  while 循环

  注意1:while循环,先判断循环条件,为真则执行循环体;

  注意2: do while循环,先执行循环体,然后判断循环条件,为真则执行下一次循环,否则中止循环(至少执行一次);

  注意3:循环条件一定要保证有变成false的时候,否则死循环。

public class TestWhile{
    public static viod main(String[] args){

        //1、while循环,先判断循环条件,为真则执行
        int count = 0; //初始化语句
        while(count<10){ //循环条件,一定要保证有变成false的时候,否则死循环
            //循环体
            System.out.println(count); 
            count++; //迭代语句
        }
        System.out.println("while循环结束!"); 

        //2、do while循环,先执行循环体,然后判断循环条件,为真则执行下一次循环,否则中止循环
        int sum= 1; //初始化语句
        do{
            //循环体
            System.out.println(sum); 
            sum++; //迭代语句
        }
        while(sum<10);//循环条件,一定要保证有变成false的时候,否则死循环
        System.out.println("do while循环结束!"); 
    }
}        

 

  4.3.2、for、增强for、foreach循环

  效率:foreach(方式5) > 增强for循环(方式4) > 普通for循环

public class TestFor{

    //方式1:最普通for循环
    public static void test1(List<String> list) {
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

    //方式2:稍微高级一点
    public static void test2(List<String> list) {
        for (int i = 0,lenth=list.size(); i < lenth; i++) {
            System.out.println(list.get(i));      
        }
    }

    //方式3:Iterator遍历
    public static void test3(List<String> list) {
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

    //方式4:增强for循环,效率很棒
    public static void test4(List<String> list){
        for(String str:list){
            System.out.println(str);
        }
    }

    //方式5:java8以后新增forEach循环,效率最好但不方便计数(lambda表达式)
    public static void test5(List<String> list){
        //list.forEach(System.out::println);和下面的写法等价
        list.forEach(str->{
            System.out.println(str);
        });
    }

    //方式6
    public static void test6(List<String> list) {
        list.iterator().forEachRemaining(str->{
            System.out.println(str);
        });
    }

}            

 

 4.4、控制循环结构

  4.4.1、使用 break 结束循环

  break 用于完全结束一个循环,跳出循环体;

  break 还能结束其所在的外层循环(这时需要在break后面紧跟一个标签,该标签必须放在循环语句前面,用于标识一个外层循环);

public class TestBreak{
  public static void main(String[] args){
        //1、一个简单的for循环,break结束一个循环
        for(int m=0; m<5; m++){
            System.out.println("m的值是:"+ m);
            if(m==1){
                break; //执行该语句时将结束for循环
            }
        }
        /* 
     运行结果: m的值是:0 m的值是:1
*/ //2、break配合标签使用,可以结束一个其外层的循环 //外层循环,outer作为一个标识符,后面是冒号(:) outer: for(int i=0; i<5; i++){ //内层循环 for(int j=0; j<3; j++){ System.out.println("i的值是:"+ i+ ", j的值是:"+ j); if(j==1){ break outer; //跳出outer标识的循环 } } } /*
     与continue的区别:i>0后面的值不会执行
     运行结果: i的值是:0, j的值是:0 i的值是:0, j的值是:1
*/ } }

 

  4.4.2、使用 continue 结束本次循环

  continue 用于中止本次循环(略过本次循环剩下的语句),开始下一次循环;

  continue 也能中止其所在的外层循环(这时需要在continue后面紧跟一个标签,该标签必须放在循环语句前面,用于标识一个外层循环);

public class TestContinue{
    public static void main(String[] args) {
        //外层循环,outer作为一个标识符,后面是冒号(:)
        outer:
        for(int i=0; i<3; i++) {
            //内层循环
            for(int j=0; j<2; j++) {
                System.out.println("i的值为:" + i + ", j的值为:" + j);
                if(j==1) {
                    //跳出outer标签所指定的循环
                    continue outer;
                }
            }
        }
        /* 
     与break的区别:i>0后面的值也执行了
     运行结果如下: i的值为:0, j的值为:0 i的值为:0, j的值为:1 i的值为:1, j的值为:0 i的值为:1, j的值为:1 i的值为:2, j的值为:0 i的值为:2, j的值为:1
*/ } }

  4.4.3、使用 return 结束方法

 

 4.5、数组

  数组也是一种数据类型(引用类型);

  必须先定义、初始化数组(分配内存空间和赋初始值),然后才能使用数组。

  静态初始化:

    int[] intArr = new int[]{ 2, 4, 6, 8, 10 }    //初始化时,只指定数组元素的初始值,不指定数组长度

    Object objArr = new String[]{ "Java", "Python" }    //初始化时,元素类型可以是定义时的子类

  动态初始化:只指定数组的长度,系统为每个数组元素赋初始值。

    int[] intArr = new int[5];

    Object objArr = new String[4];

  JDK1.5提供了foreach循环(此处应该是增强的for循环),遍历数组和集合时:无需获得数组长度,无需根据索引访问数组元素,无需循环条件,无须循环迭代语句。

public class TestForEach{
    public static void main(String[] args){
        String[] books = {"语文", "数学", "英语" };
        //使用foreach循环来遍历数组元素:无需获得数组长度,无需根据索引访问数组元素,无需循环条件,无须循环迭代语句
        for(String book : books){
            System.out.println(book);
        }
    }
}    

  

4.6、深入数组

  4.6.1、内存中的数组

  数组 是一种引用数据类型,数组引用变量 存储在 栈(stack)内存 中,实际的数组元素存储在 堆(heap)内存 中。

  数组 只能通过 引用变量 访问 堆内存中的数组元素

  栈内存:存放数组变量

  堆内存:存放对象,以便反复利用。

 

  4.6.2、基本类型数组的初始化

 

  4.6.3、引用类型数组的初始化

 

  4.6.4、操作数组的工具类

 

posted @ 2021-03-05 11:12  mingyue1818  阅读(49)  评论(0编辑  收藏  举报