1. 程式人生 > >For 語句初始化、條件表示式和步進語句的執行順序

For 語句初始化、條件表示式和步進語句的執行順序

今天在看《think in Java》 的時候,看到逗號操作符,之前都沒有注意過,按照示例程式碼運行了一次,結果很意外,這裡記錄一下

    for (int i =1, j = i + 10; i < 5; i++, j = i * 2){
        System.out.println("i = " + i + " , j = " + j);
    }
    //i = 1 , j = 11
    //i = 2 , j = 4
    //i = 3 , j = 6
    //i = 4 , j = 8

發現結果和現象中的完全不同,這是為什麼呢

其實理解for迴圈中各表示式的執行順序就理解了

step1: 初始化
setp2:條件表示式
step3:執行語句
step4:執行步進
然後執行step2

也就是說,int i =1, j = i + 10;只是在進入for迴圈的時候執行一次初始化,後面每次迴圈都不再執行,執行初始化之後,執行條件表示式i < 5;如果條件表示式成立,執行迴圈體,否則退出迴圈,
執行迴圈體後,執行步進語句。

上面的語句拆分一下,便於理解:

    int i=1,j=a1(i);
    for(; i<5; ){
        System.out.println("i = " + i + " , j = " + j);
        i++;
        j = a2(i);
    }

這裡先執行初始化,然後判斷條件是否成立,然後執行迴圈,然後執行步進,再判斷條件是否成立 …

相關推薦

For 語句初始條件表示式語句執行順序

今天在看《think in Java》 的時候,看到逗號操作符,之前都沒有注意過,按照示例程式碼運行了一次,結果很意外,這裡記錄一下 for (int i =1, j = i + 10; i < 5; i++, j = i * 2){

Java_20_迴圈結構_While迴圈_Do-while迴圈(執行順序初始布林表示式條件判斷迴圈體迭代)

迴圈結構1.當型:當P條件成立時(T),反覆執行A,知道P為“假”時才停止迴圈。2.直到型:先執行A,在判斷P,若為T,在執行A,如此反覆,知道P為F。While迴圈在迴圈剛開始時,會計算一次“布林表示式”的值,若條件為真,執行迴圈體。而對於後來每一次額外的迴圈,都會在開始前

乘法表函式+交換兩個數函式+判斷閏年函式+陣列初始清空逆置函式+判斷素數函式

寫一個函式,列印所輸入數字的乘法表: #include <stdio.h> /* 寫一個函式,實現所輸入數字的乘法表 */ void table(int n) { for (int i = 1; i <= n; i++) { for (int j = 1; j

陣列的初始清空逆置

#include <stdio.h> #include <stdlib.h> void Init(int arr[], int size) { // memset 一個位元組一個位元組的填充 memset(arr, 0, size*sizeof(

java陣列的宣告初始遍歷預設值

原始碼如下:package array; public class ArrayTest { public static void main(String[] args){ int[] iArray = new int[3]; double[] dArray = new double[3]; f

帶頭結點的迴圈連結串列表示佇列的初始入佇列出佇列的演算法

假設以帶頭結點的迴圈連結串列表示佇列,並且只設一個指標指向隊尾元素結點(注意不設頭指標),試編寫相應的佇列初始化、入佇列和出佇列的演算法。 帶頭結點迴圈鏈佇列CLQueue的型別為以下LinkList型別:typede

陣列,json,List,Map的初始取值遍歷記錄

1、陣列 /*  * @author willon  * 陣列遍歷demo  * 陣列的初始化必須有固定長度  */ public class ArraytraversalDemo {public static void main(String[] args) { //未賦

Java一維陣列定義初始二維陣列定義初始傳參方式Arrays類

陣列 陣列是Java中的一種資料型別,是一組資料的集合,陣列中的每個成員稱為元素。Java中的陣列是類型別(引用型別),Java的同一個陣列中,只能存放相同型別的資料元素。 一維陣列 一維陣列的定義方式 一維陣列有以下兩種定義方式,推薦使用第一種定義方式 <資料型別

tensorflow之變數:建立初始儲存載入

當訓練模型時,用變數來儲存和更新引數。變數包含張量 (Tensor)存放於記憶體的快取區。建模時它們需要被明確地初始化,模型訓練後它們必須被儲存到磁碟。這些變數的值可在之後模型訓練和分析是被載入。 本文件描述以下兩個TensorFlow類。點選以下連結可檢視完整的API文件

tensorflow教程:變數建立初始儲存載入

變數儲存到檔案 import tensorflow as tf import numpy as np # Create two variables. x_data = np.float32([1,2,3,4,5,6,7,8,9,0]) weights = tf.Variable(tf.random_norma

OC實現猜拳遊戲2.0(更簡單方法,用兩個物件繼承條件表示式@proterty增強點語法)

/*概述:玩家和電腦出拳,贏方加分,輸的一方不加分。每一局之後詢問玩家是否繼續。 分析:物件1:玩家,同電腦。方法:被詢問時選擇出拳並輸出選擇(列舉) 物件2:電腦,屬性:姓名,出的拳頭,分數。方法:出拳,判斷輸贏(傳玩家物件)並計分。

Java構造方法靜態初始非靜態初始塊的區別用途

Static init Main. Static init A. Static init B. Static init C. Instance init A. Constructor A. Instance init B. Constructor B. Instance init C. Constructor

動態分配記憶體 and malloc&new and 陣列的動態分配初始(memset)撤銷(delete)

 在計算機的系統中有四個記憶體區域:1)棧:在棧裡面儲存一些我們定義的區域性變數和形參。2)字元常量區:主要儲存一些字元常量,比如:char *p_str="cat",其中"cat"就儲存於字元常量區裡。3)全域性區:在全域性區裡儲存一些全域性變數和靜態變數4)堆:主要是通過

curator原始碼(一) 初始啟動關閉。

Curator框架是zookeeper客戶端框架,官網有句話說的很簡潔:curator對於zookeeper就像Guava對於java。 重複策略,例項化,眾多實用的食譜選單(分散式鎖,計數器,佇列,柵欄,訊號量,路徑快取)。 初始化 1.直接呼叫

一維陣列二維陣列的建立初始使用儲存指標訪問

1.解析一維陣列的建立和初始化 2.一維陣列的使用 3.一維陣列的儲存 4.一維陣列的指標訪問 5.解析二維陣列的建立和初始化 6.二維陣列的使用 7.二維陣列的儲存 8.二維陣列的指標訪問 1.解析一維陣列的建立和初始化

Java基礎學習 三 (類物件成員修飾符this關鍵字成員的初始構造器初始)

面向物件的基本概念 類和物件   1.類的宣告 [修飾符關鍵字] class 類名 [extends 父類名] [implements 介面1,介面2]{ //類的主體內容 } public class tt extends Test implements Te

Servlet初始運行銷毀全部過程

含義 步驟 dopost() 一次 sevice get方法 傳遞 ext 初始化 Servlet的生命周期是由servlet的容器來控制的。分為3個階段:初始化階段、運行階段、銷毀階段。 初始化階段: 初始化階段步驟: Ø Servlet容器加載se

Linux內存初始(二)identity mappingkernel image mapping

需要 存在 cat 當前 run 相對 gdi idm 虛擬地址 一、前言 本文沒有什麽框架性的東西,就是按照__create_page_tables代碼的執行路徑走讀一遍,記錄在初始化階段,內核是如何創建內核運行需要的頁表過程。想要了解一些概述性的、框架性的東西可以參考內

一:Greenplum5.10.2 生產環境安裝配置 (系統初始安裝準備)

添加 dead 有關 zlib 直接 dconf tables .rpm grub.conf 服務簡介: Greenplum Master Master只存儲系統元數據,業務數據全部分布在Segments上。其作為整個數據庫系統的入口,負責建立與客戶端的連接,SQL的解析並

mysql初始增刪改查用戶授權

ear stat bit col led inf lis fec part 1. 數據庫安全初始化 [root@elasticsearch my.cnf.d]# mysql_secure_installation #安全初始化命令 NOTE: RUNNING