下面是thinking In Java 第4版的原文: Any of the expressions initialization, Boolean-expression or step can be empty. The expression is tested before each iteration, and as soon as it evaluates to false, execution will continue at the line following the for statement. At the end of each loop, the step executes. 译:初值、条件和步进都可为空,每轮循环前条件表达式执行检查,布尔条件表达式一为假则跳出循环,执行for循环后面的语句。在每轮循环末端,执行步进。
//打印i值
}
for (int k =0; k<10; ++k){
//打印k值
}木有区别
a = i++;
b = ++k;
i == k的时候,a就比b少1。但是对于i和k来说,没有差别,都是加了1。
在for语句中,并没有用到第三个表达式的值,只是用来改变i和k的这两个变量本身的值而已。
{
public static void main(String []args)
{
for(int i=0;i<10;i++){
System.out.println(i);//0到9
}
for(int j=0;j<=10;j++){
System.out.println(j);//0到10
} for(int m=1;m<=10;m++){
System.out.println(m);//1到10
}
}
}
++k,k先加1,再取值;
无论先加,还是后加,操作完成后,都是变量的值加1;
for循环中都是要先经过这一步后,再来判断循环条件是否成立。
所以,结果一样。
Any of the expressions initialization, Boolean-expression or step can be empty. The expression is tested before each iteration, and as soon as it evaluates to false, execution will continue at the line following the for statement. At the end of each loop, the step executes.
译:初值、条件和步进都可为空,每轮循环前条件表达式执行检查,布尔条件表达式一为假则跳出循环,执行for循环后面的语句。在每轮循环末端,执行步进。
1. for(int i=0;i<10;i++)转成while后int i=0;
while(i<10){
System.out.println(i);
i++;//----------------------a
}2. for(int i=0;i<10;++i)转成while后
int i=0;
while(i<10){
System.out.println(i);
++i;//----------------------b
}
对比发现 ,无论哪种情况下,都是先打印,再i加1,在a 与b 处所不同的是加1的方式,一个是先加1 再取值,一个是先取值再加1, 但结果都一样,都是i加了1 ,
所以一样啊。
//打印i值
}
for (int k =0; k<10; ++k){
//打印k值
}
问题:为什么第二种情况也是0-9?放在这里是没有区别的,放在for循环里面,如果调用i,k就会看到区别的,你比如在里面添加个
int sumi = 0;
int sumk = 0;
for (int i=0; i<10; ){
sumi +=i++;
}for (int k =0; k<10; ){
sumk +=++k;
}
System.out.println(""+sumi+sumk);
这样结果就不一样了
//打印i值
}
for (int k =0; k<10; ++k){
//打印k值
}
问题:为什么第二种情况也是0-9?放在这里是没有区别的,放在for循环里面,如果调用i,k就会看到区别的,你比如在里面添加个
int sumi = 0;
int sumk = 0;
for (int i=0; i<10; ){
sumi +=i++;
}for (int k =0; k<10; ){
sumk +=++k;
}
System.out.println(""+sumi+sumk);
这样结果就不一样了
//打印i值
}
for (int k =0; k<10; ++k){
//打印k值
}
问题:为什么第二种情况也是0-9?放在这里是没有区别的,放在for循环里面,如果调用i,k就会看到区别的,你比如在里面添加个
int sumi = 0;
int sumk = 0;
for (int i=0; i<10; ){
sumi +=i++;
}for (int k =0; k<10; ){
sumk +=++k;
}
System.out.println(""+sumi+sumk);
这样结果就不一样了
都是在
for ( ; ; )
{
//執行動作之後才運行,因此結果是一樣
}
在你那个循环里,其实是一样的
这个你看你的for的执行顺序就知道了
//打印i值
i++;
}
for (int k =0; k<10;){
//打印k值
++k;
}
int i = 0;
while(i < 10)
{
//打印
i++; //++i;
}
int i = 0;
while(i < 10)
{
//打印
i++; //++i;
}
然后再比较
他和这个不一样(必需放在一起才能形成这种效果)
for(int i = 0; ++i < 10;){// 1- 9(先加后比较)
System.out.println(i);
}for(int i = 0; i++ < 10;){// 1- 10(先比较后加)
System.out.println(i);
}
就比如 y = 5 × i++和y = 5 × ++i这个例子,(当然这个表达式尽量少出现,或者不要出现)
当i的初始值为3时
运算结果为:15和20但是for语句中的i是一个单独的,自增语句,所以是一样的效果
{
System.print(i++);
}和for(int i=0;i<10;)
{
System.print(++i);
}
这样就会有差别的
1. for(int i=0;i<10;i++)转成while后int i=0;
while(i<10){
System.out.println(i);
i++;//----------------------a
}2. for(int i=0;i<10;++i)转成while后
int i=0;
while(i<10){
System.out.println(i);
++i;//----------------------b
}
对比发现 ,无论哪种情况下,都是先打印,再i加1,在a 与b 处所不同的是加1的方式,一个是先加1 再取值,一个是先取值再加1, 但结果都一样,都是i加了1 ,
所以一样啊。
++k 用之前+1
例如int i=1;
int k=1;
for (int l =0; l<10; l++)
{
int a = i++;
int b = ++k;
System.out.println("aaaaaaaaaaaa==="+a + "," + b);
}
针对for循环的变量来说是没什么区别的,都会0-9进行打印,但是如果这两个对某个变量进行赋值了,那么结果就会存在差异,i++先赋值 ,++k先运算后赋值
正解
int i = 0;
i++;
System.out.println(i)
int k = 0;
++k;
System.out.println(k)结果都是一样的。。因为是独立运算。。自加语句执行之后,就已经增加1了,不论前置后置
//打印i值
}
for (int k =0; k<10; ++k){
//打印k值
}
当 下面那段 执行是 相当于 for(int k=0;k<10;){
//打印k值
++k;
}所以 首先先 输出的是 0 然后执行 ++k
但是在这里面 没有别的执行体 所以在这里面的 k++ 和 ++k 的 结果是一样的
++k 是 先 k 自加 在执行别的 但是这里面 没有别的 程序体 所以 结果都是一样 自加 1
//打印i值 for语句等于 int=0;
while(i<10){
//打印i值
i++;//有木有跟++i一样
}
}
for (int k =0; k<10; ++k){
//打印k值
}
执行循序:初始化部分-->判断-->迭代-->判断-->迭代
#include "stdio.h"
int main()
{
int a[5],k;
for(k=0;k<5;k++)
scanf_s("%d",&a[k]);
for(;k>-1;--k)
printf("\n%d\n",a[k]);
return 0;
}(注:vs2012中是scanf_s)输入1 2 3 4 5后回车,第一行出现-858993460随机数,后面才是5 4 3 2 1,也就是后一个for循环里面的语句执行了6次