讨论下:for (int i=0; i<10; i++){
//打印i值
}
for (int k =0; k<10; ++k){
//打印k值
 }
问题:为什么第二种情况也是0-9?

解决方案 »

  1.   

    正解++K,i++是循环完成再实行。。 所以,讨论下:for (int i=0; i<10; i++){
    //打印i值
    }
    for (int k =0; k<10; ++k){
    //打印k值
    }木有区别
      

  2.   

    i++和++i这两个表达式的差别只有在用到他们的值的时候才会体现出来,比如
    a = i++;
    b = ++k;
    i == k的时候,a就比b少1。但是对于i和k来说,没有差别,都是加了1。
    在for语句中,并没有用到第三个表达式的值,只是用来改变i和k的这两个变量本身的值而已。
      

  3.   

    public class Test
    {
        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
        }
        }
    }
      

  4.   

    有疑问 debug 跟踪一遍就明白了
      

  5.   

    两者一样,理由LS都说了但是有高手说用 ++i 会好一点
      

  6.   

    i++,i取值,在加1;
    ++k,k先加1,再取值;
    无论先加,还是后加,操作完成后,都是变量的值加1;
    for循环中都是要先经过这一步后,再来判断循环条件是否成立。
    所以,结果一样。
      

  7.   

    我知道我错在哪儿了,对for()内的执行逻辑弄错了。是不是这样:for(初值;条件;步进){循环体},第一次运行时,先看初值是多少,然后看是否满足条件,满足则运行循环体,然后才执行步进。我把参与运算或赋值和for中的情况混淆了,我当初是这样想的:先看初值--> 条件--> 然后步进--> 循环体--> 条件-->步进-->循环体了(而i++ 和 ++k的情况不同),所以我以为第二种情况应该是1-10了,呵,,
      

  8.   

    在for循环体现不出来啦!!在运算的时候或在if判断用i++或++i可以体现它们的区别!
      

  9.   

    下面是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循环后面的语句。在每轮循环末端,执行步进。
      

  10.   

    应该是由于 i++和++k是在for循环正文内容执行完后,才执行的 所以没有影响打印结果喽,楼主发现这个问题好样的  我以前没怎么注意
      

  11.   

    i++ 和 ++i 在执行完以后i值都是加一但是作为一个表达式他们运算的结果是不一样的在两个循环中用到的都是i的值判断的所以输出结果是一样的 主要是了解for循环的执行希望对你有用
      

  12.   

    将上面循环用while转化后 可很快看出来
    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 ,
    所以一样啊。
      

  13.   

    上述两个for循环并无区别,k值都是从0-9
      

  14.   

    ++i 和 i++ ,i的值都会自增一个,只是整个表达式的值不一样,(++i)取i增加后的值,(i++)取i增加前的值。另外,for循环执行的过程是:先获得变量的值,然后判断循环条件,条件满足,则执行一次循环体,之后执行第三个表达式。如此循环,直到条件不再满足为止!
      

  15.   

    for (int i=0; i<10; i++){
    //打印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);
    这样结果就不一样了
      

  16.   

    for (int i=0; i<10; i++){
    //打印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);
    这样结果就不一样了
      

  17.   

    for (int i=0; i<10; i++){
    //打印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);
    这样结果就不一样了
      

  18.   

    i++, ++k
    都是在 
    for ( ; ; )

       //執行動作之後才運行,因此結果是一樣
      

  19.   

    先看明白for的条件执行执行方式
      

  20.   

    理解for循环的执行顺序,就明白了,
      

  21.   

    此处与++i和i++无关,主要是for执行顺序问题。第一次进入for循环,先执行第一部分,即赋值。然后执行第二部分执行布尔检查,布尔条件表达式一为假则跳出循环,执行for循环后面的语句;否则执行for的内容,在每轮循环末端,执行步进。
      

  22.   

    ++i 和i++
    在你那个循环里,其实是一样的
    这个你看你的for的执行顺序就知道了
      

  23.   

    LZ把for循环的执行顺序搞清楚就自然明白了
      

  24.   

    不管是i++,还是++i,i的值都会加1的,前者如果是n = i++,n的值不变,即i++整体的值是没变的,后者整体的值要加1.
      

  25.   

    讨论下:for (int i=0; i<10; ){
    //打印i值
    i++;
    }
    for (int k =0; k<10;){
    //打印k值
    ++k;
    }
      

  26.   

    相当于:
    int i = 0;
    while(i < 10)
    {
        //打印
        i++;  //++i;
    }
      

  27.   

    相当于:
    int i = 0;
    while(i < 10)
    {
      //打印
      i++; //++i;
    }
      

  28.   

    在这两种循环中,都是先将k+1
    然后再比较
    他和这个不一样(必需放在一起才能形成这种效果)
    for(int i = 0; ++i < 10;){// 1- 9(先加后比较)
    System.out.println(i);
    }for(int i = 0; i++ < 10;){// 1- 10(先比较后加)
    System.out.println(i);
    }
      

  29.   

    i++和++i在没有参加到运算表达式里的话,效果去一样一样滴举个例子
    就比如 y = 5 × i++和y = 5 × ++i这个例子,(当然这个表达式尽量少出现,或者不要出现)
    当i的初始值为3时
    运算结果为:15和20但是for语句中的i是一个单独的,自增语句,所以是一样的效果
      

  30.   

    for(int i=0;i<10;)
    {
    System.print(i++);
    }和for(int i=0;i<10;)
    {
    System.print(++i);
    }
    这样就会有差别的
      

  31.   

    将上面循环用while转化后 可很快看出来
    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 ,
    所以一样啊。
      

  32.   

    把for循环的执行流程好好看看看~!
      

  33.   

    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);

    }
      

  34.   

    i++ ++k
    针对for循环的变量来说是没什么区别的,都会0-9进行打印,但是如果这两个对某个变量进行赋值了,那么结果就会存在差异,i++先赋值 ,++k先运算后赋值
      

  35.   

    看前两个限制条件 ,for(i=0;i<10;....)意思就是说i的取值范围从0到小于10。最后的i++或者++i就代表那个数的增长形势。
      

  36.   


    正解
    int i = 0;
    i++;
    System.out.println(i)
    int k = 0;
    ++k;
    System.out.println(k)结果都是一样的。。因为是独立运算。。自加语句执行之后,就已经增加1了,不论前置后置
      

  37.   

    讨论下:for (int i=0; i<10; i++){
    //打印i值
    }
    for (int k =0; k<10; ++k){
    //打印k值
    }
     
    当   下面那段  执行是 相当于 for(int k=0;k<10;){
      //打印k值
      ++k;
    }所以 首先先 输出的是 0    然后执行 ++k  
    但是在这里面 没有别的执行体  所以在这里面的  k++  和 ++k 的 结果是一样的
    ++k 是 先  k 自加 在执行别的  但是这里面 没有别的 程序体 所以 结果都是一样 自加 1
     
      

  38.   

    你第一次i 循环 执行完了 是0-9  k循环是i循环的外边  当然 两者循环都是一样的了   就是i  k 名不一样
      

  39.   

    无论i++,还是++i, 执行结果是一样的,因为在for最后面一个分后后面,没有赋值,只有一个运算(i++或者++i),最后将这个运算结果交给for循环内部判断。所以i++或者++i在这里的意义是一样的。
      

  40.   

    i从0开始,限制条件都是i<10,中间没有终止循环,自然输出的都是0~9啦!
      

  41.   

    for (int i=0; i<10; i++){
    //打印i值                         for语句等于     int=0;
                                                 while(i<10){
                                                   //打印i值 
                                                           i++;//有木有跟++i一样
                                                  }
    }
    for (int k =0; k<10; ++k){
    //打印k值
    }
      

  42.   

    这里无论是i++还是++i都不会影响结果,因为for的第3个条件“增量”在判断结束后都会被执行,所以无论是i++还是++i,这个表达式执行完后i永远会增加1,对循环没有不一样的,所以第2种方法依然是0-9.
      

  43.   

    你只要知道执行循序就可以了,这怎么解释?
    执行循序:初始化部分-->判断-->迭代-->判断-->迭代
      

  44.   

    20楼正解,判断完直接执行下面的语句,然后再加减操作,简单的例子:
    #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次