for的for循环(计算机编程)

JavaScript016

for的for循环(计算机编程),第1张

for( )里面是3个语句,两个分号。第一个语句是开始前执行,第二个语句是判断真假,如果真,就执行后面(大括号内)的代码。第三个语句是每次执行完毕后执行的东西,通常第三个语句使用i++表示i=i+1的意思,用来递增自变量i。

比如:

最常用的 for(int i = 0 i< 10 i++){ //i-=3 跟 i=i-3效果相同 printf(i = %d\n,i)}递减式for for(int i = 10 i > 0 i -= 3){ //i-=3 跟 i=i-3效果相同 printf(i = %d\n,i)}递增式for for(int i = 10 i > 0 i += 3){ //i+=3 跟 i=i+3效果相同printf(i = %d\n,i)} 语法:

(1)for循环 for(int i=0i<10i++){statements;} 语法

for(initializetestincrement){

statement

}

示例

例1:循环1到100的值 <scripttype=text/javascript>varValue=0for(vara=1a<=100a++){Value=Value+aValue+=<br>}document.write(Value)</script>例2:js输出九九乘法表 <scripttype=text/javascript>varbdqnyhb=for(vari=1i<=9i++){for(varj=1j<=ij++){bdqnyhb+=i+×+j+=+i*j+}bdqnyhb+=<br>}document.write(bdqnyhb)</script>JS另有for..in..语句。 Java的for语句形式有两种:一种是和C语言中的for语句形式一样,另一种形式用于在集合和数组之中进行迭代。有时候把这种形式称为增强型的for(enhanced for)语句,它可以使循环更加紧凑和容易阅读。

示例

为了演示,参考下面的数组,它保存数字1到10:

int[] numbers = {1,2,3,4,5,6,7,8,9,10}

下面的程序EnhancedForDemo使用增强for循环遍历这个数组: public class EnhancedForDemo {    public static void main(String[] args) {        int[] numbers = {1,2,3,4,5,6,7,8,9,10}            for(int item : numbers){                System.out.println(Countis:+item)            }        }    }在这个例子中,变量item保存从数字数组获得的当前值。

Count is :1

Count is :2

Count is :3

Count is :4

Count is :5

Count is :6

Count is :7

Count is :8

Count is :9

Count is :10

建议在情况允许的条件下,使用for语句的这种形式,而不使用其一般形式。 for 循环变量:

=初始值 to 终止值 do 语句内容

或者

for 循环变量:=初始值 downto 终止值 do 语句内容

其他内容与C的相同,此处省略。

循环语句的含义在于从“控制变量”等于“初值”开始,循环到“终值”,当“控制变量”的值:

(1) to:大于终值时,终止循环。这里相当于BASIC中STEP(步长)=1的情况。

(2) downto:小于终值时,终止循环。这里相当于BASIC中STEP(步长)=-1的情况。

示例一(to)

按顺序输出1~100: fori:=1tondowrite(i,'')输出值为:1 2 3 4 5 6 …… 98 99 100

示例二(downto)

按倒序输出1~100 forI:=100downto1dowrite(i,'')输出值为:100 99 98 97 …… 3 2 1

注意:单个语句可直接用for循环变量:=初始值 to 终止值 do 语句内容,但有多个语句时要加

“begin“和”end“。

格式为:

for 循环变量:=初始值 to/downto 终止值 do

语句内容1;

语句内容2;

……

语句内容n;

end; FOR 循环变量=初始值 TO 终止值 STEP步长

语句内容

NEXT循环变量

其他内容与C的相同,此处亦省略。

C语言语法

只要指定条件为 true 都执行语句块。

for(initializationtestincrement)

statements

参数

initialization

必选项。一个表达式。该表达式只在执行循环前被执行一次。

test

必选项。一个 Boolean表达式。如果 test 是 true,则 statement 被执行。如果 test 是 false,则循环结束。

increment

可选项。一个表达式。在每次经过循环的最后执行该递增(减)表达式。

statements

可选项。test 是 true 时,要执行的一个或多个语句。可以是复合语句。

说明

循环要执行确定的次数,通常使用for循环。

示例

下面的例子示范了一个for循环。

/* 在开始时 i 被设为 0,并在每次重复的最后被增加 1。

在循环重复前,

如果 i 不小于 10,则循环结束。*/

var myarray = new Array()

for(i = 0i <10i++) {

myarray= i

在c语言的解释是:

for:循环语句。

作用

循环

它的一般形式为:

for(<初始化><条件表达式><增量>)

语句

初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用分开。

例如:

for(i=1i<=10i++)

语句;

上例中先给i赋初值1,判断i是否小于等于10,若是则执行语句,之后值增加1。再重新判断,直到条件为假,即i>10时,结束循环。

注意:

(1).for循环中语句可以为语句体,但要用{和}将参加循环的语句括起来。

(2).for循环中的初始化、条件表达式和增量都是选择项,即可以缺省,但不能缺省。省略了初始化,表示不对循环控制变量赋初值。省略了条件表达式,则不做其它处理时便成为死循环。省略了增量,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。

(3).for循环可以有多层嵌套。

例如:

for() 语句

for(i=1i+=2) 语句

for(j=5) 语句

这些for循环语句都是正确的。

FOR

field of regard 的缩写LOGO中的FOR

visal basic 示例:

Private Sub Command1_Click()Dim s(1 To 1000) As Singles(1) = 0s(2) = 1For i = 3 To 1000s(i) = 1For j = 2 To i - 1If i Mod j = 0 Then s(i) = 0Next jIf s(i) = 1 Then Print iNext iEnd Sub

(版本不同可能输入方式不同) 控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其它值为真。

for语句有两大类:

数值for循环

格式:

for var=exp1,exp2,exp3 do

loop-part

end

for将用exp3作为step从exp1(初始值)到exp2(终止值),执行loop-part。其中exp3可以省略,默认step=1

有几点需要注意:

1. 三个表达式只会被计算一次,并且是在循环开始前。

for i=1,f(x) do

print(i)

end

for i=10,1,-1 do

print(i)

end

第一个例子f(x)只会在循环前被调用一次。

2. 控制变量var是局部变量自动被声明,并且只在循环内有效.

for i=1,10 do

print(i)

end

max = i -- probably wrong! 'i' here is global

如果需要保留控制变量的值,需要在循环中将其保存

-- find a value in a list

local found = nil

fori=1,a.n do

if a[i] == value then

found = i -- save value of 'i'

break

end

end

print(found)

3. 循环过程中不要改变控制变量的值,那样做的结果是不可预知的。如果要退出循环,使用break语句。

范型for循环

-- print all values of array 'a'

格式:for i,v in ipairs(a) do print(v) end

范型for遍历迭代子函数返回的每一个值。

再看一个遍历表key的例子:

-- print all keys of table 't'

for k in pairs(t) do print(k) end

范型for和数值for有两点相同:

1. 控制变量是局部变量

2. 不要修改控制变量的值

再看一个例子,假定有一个表:

days = {Sunday, Monday, Tuesday, Wednesday,

Thursday, Friday, Saturday}

想把对应的名字转换成星期几,一个有效地解决问题的方式是构造一个反向表:

revDays = {[Sunday] = 1, [Monday] = 2,

[Tuesday] = 3, [Wednesday] = 4,

[Thursday] = 5, [Friday] = 6,

[Saturday] = 7}

下面就可以很容易获取问题的答案了:

x = Tuesday

print(revDays[x]) -->3

我们不需要手工,可以自动构造反向表

revDays = {}

for i,v in ipairs(days) do

revDays[v] = i

end

格式

(FOR 循环变量启动数据终止数据[循环体]步长)

若步长为1,则步长可省略,圆括号可去掉。

当循环结束时,循环变量的值为最后一次符合启动数据至终止数据之间的数值。不是第一次不符合值。

例:FOR X 1 5 [PR 'A] PR :X

显示: A

A

A

A

A

5

并不是5个A和一个6 而是5个A和一个5

这种现象被称为:BAG现象 介绍

对一组文件中的每一个文件执行某个特定命令。

FOR %variable IN (set) DO command [command-parameters]

%variable 指定一个单一字母可替换的参数。

(set) 指定一个或一组文件。可以使用通配符。

command 指定对每个文件执行的命令。

command-parameters

为特定命令指定参数或命令行开关。

在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.如果命令扩展名被启用,下列额外的 FOR 命令格式会受到支持:

FOR /D %variable IN (set) DO command [command-parameters]

如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

检查以 [drive:]path 为根的目录树,指向每个目录中的

FOR 语句。如果在 /R 后没有指定目录,则使用当前

目录。如果集仅为一个单点(.)字符,则枚举该目录树。

FOR /L %variable IN (start,step,end) DO command [command-parameters]

该集表示以增量形式从开始到结束的一个数字序列。

因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生

序列 (5 4 3 2 1)。

FOR /F [options] %variable IN (file-set) DO command [command-parameters]

FOR /F [options] %variable IN (string) DO command [command-parameters]

FOR /F [options] %variable IN ('command') DO command [command-parameters]

或者,如果有 usebackq 选项:

FOR /F [options] %variable IN (file-set) DO command [command-parameters]

FOR /F [options] %variable IN (string) DO command [command-parameters]

FOR /F [options] %variable IN ('command') DO command [command-parameters]

filenameset 为一个或多个文件名。继续到 filenameset 中的下一个文件之前,每份文件都已被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。您可通过指定可选 options参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字。这些关键字为:

eol=c - 指一个行注释字符的结尾(就一个)

skip=n - 指在文件开始时忽略的行数。

delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。

tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的for本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。

usebackq - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 filenameset中使用双引号扩起文件名称。

范例

某些范例可能有助:

FOR /F eol=tokens=2,3* delims=, %i in (myfile.txt) do @echo %i %j %k会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将每行中的第二个和第三个符号传递给for程序体;用逗号和/或空格定界符号。请注意,这个for程序体的语句引用 %i 来取得第二个符号,引用 %j 来取得第三个符号,引用 %k来取得第三个符号后的所有剩余符号。对于带有空格的文件名,您需要用双引号将文件名括起来。为了用这种方式来使用双引号,您还需要使用 usebackq 选项,否则,双引号会被理解成是用作定义某个要分析的字符串的。%i 专门在for语句中得到说明,%j 和 %k 是通过tokens= 选项专门得到说明的。您可以通过 tokens= 一行指定最多 26 个符号,只要不试图说明一个高于字母 'z' 或'Z' 的变量。请记住,FOR变量是单一字母、分大小写和全局的;而且,同时不能有 52 个以上都在使用中。您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,用单引号将括号之间的 filenameset 括起来。这样,该字符串会被当做一个文件中的一个单一输入行。最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将括号之间的 filenameset 变成一个反括字符串。该字符串会被当做命令行,传递到一个子 CMD.EXE,其输出会被抓进内存,并被当作文件分析。

因此,以下例子:

FOR /F usebackq delims== %i IN (`set`) DO @echo %i会枚举当前环境中的环境变量名称。另外,FOR变量参照的替换已被增强。您可以使用下列选项语法:

~I - 删除任何引号(),扩充 %I

%~fI - 将 %I 扩充到一个完全合格的路径名

%~dI - 仅将 %I 扩充到一个驱动器号

%~pI - 仅将 %I 扩充到一个路径

%~nI - 仅将 %I 扩充到一个文件名

%~xI - 仅将 %I 扩充到一个文件扩展名

%~sI - 扩充的路径只含有短名

%~aI - 将 %I 扩充到文件的文件属性

%~tI - 将 %I 扩充到文件的日期/时间

%~zI - 将 %I 扩充到文件的大小

%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充

到找到的第一个完全合格的名称。如果环境变量名

未被定义,或者没有找到文件,此组合键会扩充到

空字符串

可以组合修饰符来得到多重结果:

%~dpI - 仅将 %I 扩充到一个驱动器号和路径

%~nxI - 仅将 %I 扩充到一个文件名和扩展名

%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名

%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充

到找到的第一个驱动器号和路径。

%~ftzaI - 将 %I 扩充到类似输出线路的 DIR

在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法

用一个有效的 FOR变量名终止。选取类似 %I 的大写变量名

比较易读,而且避免与不分大小写的组合键混淆。

使用For输出目录名而忽略文件:

@echo off

for/d %%i in (window?) do @echo %%i

pause for counter = start to end step = 步进

执行语句

next

这个语句的具体解释是指定,执行命令的次数。

具体例子如下

set wshshell=wscript.createobject(wscript.shell) '定义vbs对象

dim num,wen ’创建变量

wen = inputbox(请输入要轰炸的内容必须是英文要不然会报错哦\(^o^)/~,发送消息的按键必须是回车键)

num = cint(inputbox(请输入要轰炸的次数必须是数字!!)) '将字符串转化为数字

msgbox 欢迎使用qq炸弹你有10秒的时间定位要轰炸qq的对话框

wscript.sleep 10000

const i=1

for k= i to num ‘步进为1默认,开始次数1,循环次数num变量等等待用户输入

wshshell.sendkeys wen ’发送用户输入的消息

wshshell.sendkeys {ENTER}

wscript.sleep 100

next

###for()、增强for()、foreach()、stream().foreach()

*测试一

```java

public class TestFor {

    private static void doSome(String s) {

    }

    public static void main(String[] args) {

        /*添加数据*/

        List<String>list = new ArrayList<>()

        for (int i = 0i <10i++) {

            list.add("第" + i + "条数据")

        }

        /*for循环*/

        long st1 = System.currentTimeMillis()

        for (int i = 0i <list.size()i++) {

            doSome(list.get(i))

        }

        /*增强for循环*/

        long st2 = System.currentTimeMillis()

        for (String s : list) {

            doSome(s)

        }

        /*foreach*/

        long st3 = System.currentTimeMillis()

        list.forEach(s ->doSome(s))

        /*stream.foreach*/

        long st4 = System.currentTimeMillis()

        list.stream().forEach(s ->doSome(s))

        long st5 = System.currentTimeMillis()

        print(st1, st2, st3, st4, st5)

    }

    /*时间输出*/

public static void print(long s1, long s2, long s3, long s4, long s5) {

        System.out.println("for          循环: " + (s2 - s1) + "ms")

        System.out.println("增强for      循环: " + (s3 - s2) + "ms")

        System.out.println("foreach      循环:" + (s4 - s3) + "ms")

        System.out.println("stream.foreach循环:" + (s5 - s4) + "ms")

    }

}

```

**结果:**

for          循环: 0ms

增强for      循环: 0ms

foreach      循环:129ms

stream.foreach循环:3ms

------------

* **测试二**

```java

List<String>list = new ArrayList<>()

for (int i = 0i <1000i++) {

list.add("第" + i + "条数据")

}

```

**结果:**

for          循环: 1ms

增强for      循环: 1ms

foreach      循环:121ms

stream.foreach循环:3ms

------------

* **测试三**

```java

List<String>list = new ArrayList<>()

for (int i = 0i <1000000i++) {

list.add("第" + i + "条数据")

}

```

**结果:**

for          循环: 17ms

增强for      循环: 23ms

foreach      循环:165ms

stream.foreach循环:18ms

------------

* **测试四**

```java

private static void doSome(String s) {

try {

Thread.sleep(1)

} catch (InterruptedException e) {

e.printStackTrace()

}

}

```

**结果:**

for          循环: 184ms

增强for      循环: 169ms

foreach      循环:224ms

stream.foreach循环:116ms