程序控制结构及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());
}
}
三: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穿透
程序控制结构及for循环、foreach循环、迭代器的更多相关文章
- for循环,for…in循环,forEach循环的区别
for循环,for…in循环,forEach循环的区别for循环通关for循环,生成所有的索引下标for(var i = 0 ; i <= arr.length-1 ; i++){ 程序内容 } ...
- 增强for循环 -- foreach循环
1 作用 简化迭代器的书写格式.(注意:foreach循环的底层还是使用了迭代器遍历.) 2 适用范围 如果是实现了Iterable接口的对象或者是数组对象都可以使用foreach循环. 3 格 ...
- java 流程执行 循环 foreach循环
一. if分支 1. 结构 if else if else 2.执行原则 if if if 结构 会一直去执行()里的判断语句 if else if else if 结构 只要一条( ...
- JavaScript之数组循环 forEach 循环输出数组元素
var arrayAll = []; arrayAll.push(1); arrayAll.push(2); arrayAll[arrayAll.length] = 3; arrayAll[array ...
- 为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作--java.util.ConcurrentModificationException
摘要 foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素. 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体 ...
- 有关集合的foreach循环里的add/remove
转自:Hollis(微信号:hollischuang) 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 .foreach循环 ...
- foreach循环里不能remove/add元素的原理
foreach循环 foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素.Java语言从JDK 1.5.0开始引入forea ...
- IT兄弟连 Java语法教程 数组 使用foreach循环遍历数组元素
从JDK5之后,Java提供了一种更简单的循环:foreach循环,也叫作增强for循环,这种循环遍历数组和集合更加简洁.使用foreach循环遍历数组和集合元素时,无需获得数组或集合的长度,无需根据 ...
- PHP 循环 - For 循环基础讲解
PHP 循环 - For 循环 循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块. for 循环 for 循环用于您预先知道脚本需要运行的次数的情况. 语法 for (初始值; 条件; ...
随机推荐
- C++的开源跨平台日志库glog学习研究(一)
作为C++领域中为数不多的好用.高效的.跨平台的日志工具,Google的开源日志库glog也算是凤毛麟角了.glog 是一个C++实现的应用级日志记录框架,提供了C++风格的流操作. 恰巧趁着五一我也 ...
- Vue的实时时间转换Demo
Vue的实时时间转换Demo time.html: <!DOCTYPE html> <html lang="en"> <head> <me ...
- spring boot日志管理配置
spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J,Log4J2和Logback.每种L ...
- 《Android应用性能优化》3——电量、渲染
7.延长电池续航时间 尽管应用有时看起来没做多少事,但实际上可能会很耗电,运行不了多久就会把电量榨干,使设备开机不到半天就没电了.那些被归为“电池杀手”的应用,最终的宿命就是被删除.得差评.不挣钱.因 ...
- Android_Activity启动模式
在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: ...
- Python -- Gui编程 -- Qt库的使用 -- 菜单与对话框
1.菜单 import sys from PyQt4 import QtCore, QtGui class MyWindow(QtGui.QMainWindow): def __init__(self ...
- 【Express系列】第4篇——使用session
session 在 web 应用中使用很普遍,不过在 node 上面,要用 session 还真得折腾一番才行. 从加入中间件,到 session 的写入.清除,当时是遇到了不少坑的. 当然也可能是我 ...
- C#的Lambda表达式嵌套例子
/* *curStatsResult是List<string>类型, *x.GetAllOsVersion()结果是string[]类型, *这里是先使用SelectMany()返回一个结 ...
- [笔记] Fiddler 抓包工具的使用
目录 Filler 的特点 Fidder工具的下载安装 Fidder 证书安装 Fiddler工作原理 Fidder 常见的命令和按钮 Fiddler 各种疑难杂症 Fillder 的特点 Fidde ...
- gocommand:一个跨平台的golang命令行执行package
最近在做一个项目的时候,需要使用golang来调用操作系统中的命令行,来执行shell命令或者直接调用第三方程序,这其中自然就用到了golang自带的exec.Command. 但是如果直接使用原生e ...