程序控制结构及for循环、foreach循环、迭代器

结构化程序设计

三种基本控制结构:顺序结构、选择结构、循环结构。

在这种思想的指导下,发展出了面向过程编程方式。面向过程编程的核心是算法+数据结构。算法可以用顺序、选择、循环这三种基本控制结构来实现。数据结构是指数据以及其存取方式。

面向对象编程,对象+消息传递。

一:fro循环

1、for循环执行过程:

(1):为第一个引号前的变量赋值
(2):检查判断条件为真为假
(3):真,执行;假,退出
(4):第二个引号后面的语句执行
(5):检查判断条件为真为假

2、每一部分都不是必须的:

public class forDemo {
    public static void main(String[] args) {
        for (;;) {
            ;
        }
    }
}
//上面的写法没错

3、还可以这样写

    public static void main(String[] args) {
        for (int i=0; i<100; i++,i++) {
            
        }
    }

4、带标签的for循环

    public static void main(String[] args) {
        for (int i=0; i<2; i++) {
            System.out.println("我是最外层");
            middle:
            for(int j=0; j<2; j++) {
                System.out.println("我是中间层");
                for (int k=0; k<2; k++) {
                    System.out.println("我是最里层");
                    break middle;
                }
            }
        }
    }

  //运行结果:
  //我是最外层
  //我是中间层
  //我是最里层
  //我是最外层
  //我是中间层
  //我是最里层

二、foreach循环

传统的for循环可以遍历数组、集合,for 循环里可以使用容器自身的方法对容器内元素操作。

在jdk1.5之后,提供了foreach循环,所有的foreach均可被普通for循环代替。

foreach 为遍历数组、集合框架内的元素提供了很大便利;但它会丢失元素的下标信息,虽然也可以使用计数器来完成对特定下标元素操作,但这样做不够优雅。所以,当遍历集合或数组时,如果需要集合或数组元素的下标,推荐使用传统for循环方式。

foreach迭代集合,底层是迭代器,因为迭代器锁定了当前容器,所以不可以使用容器自身的方法对容器里的元素进行操作。

使用迭代器对容器进行操作,不可以使用容器自身的方法对容器元素进行操作。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Demo {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1); list.add(2); list.add(3);list.add(4);list.add(5);
//         使用迭代器可以删除容器内的元素
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            if ("1".equals(iterator.next()+"")) {
                iterator.remove();
            }
        }
//        使用for循环、容器方法也可以删除容器内的元素
//        for (int i=0; i < 5; i++) {
//            list.remove(0);
//        }
//        使用foreach会报错
//        for (Integer i : list) {
//            list.remove(0);
//        }
        System.out.println(list.size());
    }
}
View Code

三:switch

public class Demo {
    public static void main(String[] args) {
        int i = 1, j = 3;
        switch (i) {//输出1234
        case 1:
            System.out.println(1);
        case 2:
            System.out.println(2);
        case 3:
            System.out.println(3);
        case 4:
            System.out.println(4);
        }
        switch (j) {//输出34
        case 1:
            System.out.println(1);
        case 2:
            System.out.println(2);
        case 3:
            System.out.println(3);
        case 4:
            System.out.println(4);
        }
    }
}
小心case穿透
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入'0——10'的一个数字");
            String input = scanner.nextLine();
            if ("-1".equals(input)) {
                scanner.close();
                System.err.println("程序退出!");
                break;
            }
            switch (input) {
            case "1":
            case "3":
            case "5":
            case "7":
            case "9":
                System.out.println("您输入的是一个单数");
                System.out.println("试着输入一个双数");
                //break;
        /* 假如把这个break删掉,
         * 如果输入一个单数,也会输出下面的两行;
         * 如果输入一个双数,只是输出下面的两行;
         * 如果输入一个100,只会输出"请输入'0——10'的一个数字";
         */
                
            case "0":
            case "2":
            case "4":
            case "6":
            case "8":
            case "10":
                System.out.println("您输入的是一个双数");
                System.out.println("试着输入一个单数");
            }
        }
    }
利用case穿透
原文地址:https://www.cnblogs.com/Mike_Chang/p/6754374.html