结构化程序设计

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

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

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

一: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循环、迭代器的更多相关文章

  1. for循环,for…in循环,forEach循环的区别

    for循环,for…in循环,forEach循环的区别for循环通关for循环,生成所有的索引下标for(var i = 0 ; i <= arr.length-1 ; i++){ 程序内容 } ...

  2. 增强for循环 -- foreach循环

    1  作用 简化迭代器的书写格式.(注意:foreach循环的底层还是使用了迭代器遍历.) 2  适用范围 如果是实现了Iterable接口的对象或者是数组对象都可以使用foreach循环. 3  格 ...

  3. java 流程执行 循环 foreach循环

    一. if分支 1. 结构  if  else if   else 2.执行原则 if  if  if 结构  会一直去执行()里的判断语句 if else if  else if 结构  只要一条( ...

  4. JavaScript之数组循环 forEach 循环输出数组元素

    var arrayAll = []; arrayAll.push(1); arrayAll.push(2); arrayAll[arrayAll.length] = 3; arrayAll[array ...

  5. 为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作--java.util.ConcurrentModificationException

    摘要 foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素. 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体 ...

  6. 有关集合的foreach循环里的add/remove

    转自:Hollis(微信号:hollischuang) 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 .foreach循环 ...

  7. foreach循环里不能remove/add元素的原理

    foreach循环 ​    foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素.Java语言从JDK 1.5.0开始引入forea ...

  8. IT兄弟连 Java语法教程 数组 使用foreach循环遍历数组元素

    从JDK5之后,Java提供了一种更简单的循环:foreach循环,也叫作增强for循环,这种循环遍历数组和集合更加简洁.使用foreach循环遍历数组和集合元素时,无需获得数组或集合的长度,无需根据 ...

  9. PHP 循环 - For 循环基础讲解

    PHP 循环 - For 循环 循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块. for 循环 for 循环用于您预先知道脚本需要运行的次数的情况. 语法 for (初始值; 条件; ...

随机推荐

  1. C++的开源跨平台日志库glog学习研究(一)

    作为C++领域中为数不多的好用.高效的.跨平台的日志工具,Google的开源日志库glog也算是凤毛麟角了.glog 是一个C++实现的应用级日志记录框架,提供了C++风格的流操作. 恰巧趁着五一我也 ...

  2. Vue的实时时间转换Demo

    Vue的实时时间转换Demo time.html: <!DOCTYPE html> <html lang="en"> <head> <me ...

  3. spring boot日志管理配置

    spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J,Log4J2和Logback.每种L ...

  4. 《Android应用性能优化》3——电量、渲染

    7.延长电池续航时间 尽管应用有时看起来没做多少事,但实际上可能会很耗电,运行不了多久就会把电量榨干,使设备开机不到半天就没电了.那些被归为“电池杀手”的应用,最终的宿命就是被删除.得差评.不挣钱.因 ...

  5. Android_Activity启动模式

    在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: ...

  6. Python -- Gui编程 -- Qt库的使用 -- 菜单与对话框

    1.菜单 import sys from PyQt4 import QtCore, QtGui class MyWindow(QtGui.QMainWindow): def __init__(self ...

  7. 【Express系列】第4篇——使用session

    session 在 web 应用中使用很普遍,不过在 node 上面,要用 session 还真得折腾一番才行. 从加入中间件,到 session 的写入.清除,当时是遇到了不少坑的. 当然也可能是我 ...

  8. C#的Lambda表达式嵌套例子

    /* *curStatsResult是List<string>类型, *x.GetAllOsVersion()结果是string[]类型, *这里是先使用SelectMany()返回一个结 ...

  9. [笔记] Fiddler 抓包工具的使用

    目录 Filler 的特点 Fidder工具的下载安装 Fidder 证书安装 Fiddler工作原理 Fidder 常见的命令和按钮 Fiddler 各种疑难杂症 Fillder 的特点 Fidde ...

  10. gocommand:一个跨平台的golang命令行执行package

    最近在做一个项目的时候,需要使用golang来调用操作系统中的命令行,来执行shell命令或者直接调用第三方程序,这其中自然就用到了golang自带的exec.Command. 但是如果直接使用原生e ...