程序控制结构及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迭代集合,底层是迭代器,因为迭代器锁定了当前容器,所以不可以使用容器自身的方法对容器里的元素进行操作。
使用迭代器对容器进行操作,不可以使用容器自身的方法对容器元素进行操作。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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()); } }
三:switch
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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); } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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("试着输入一个单数"); } } }