(java和c) while循环与++i和i++

(java和c) while循环与++i和i++

概括

总结:把++和比较看成是原语操作,不可分割。当不符合循环条件时,就结束这个原语操作。不同情况区别于是先++再比较,还是先比较再++。


int[] nums = new int[]{0, 1, 2, 3, 4}
int a; //用于debug时知道`nums[i]`的值
int i=0; // 每次case,都初始化为0
  • case1:

    while ((a = nums[i++]) < 2); 
    
    • 运算规则:先比较,再++;不管是否跳出,最后都++(就是说,++操作独立于while结构体)

    • 过程:

      // i=0; nums[0] ?> 2; i+1; num[1] ?> 2; i+1; num[2] ?> 2, no; i+1;
      
    • 具体如下:

      i=0开始,先判断nums[i]是否小于2,然后判断,以此类推,

      直到发现nums[2]比2大,跳出循环。

      此时,i依然+1

    • 结果:i=3已经跳过了一个下标

  • case2:

    while ((a = nums[++i]) < 2); 
    
    • 运算规则:先++,再比较;因此每次比较前就做++操作,不符合循环条件,就不再执行下一次的操作。

    • 过程:

      i=0; i+1; nums[1] ?> 2; i+1; nums[2] ?> 2, no;
      
    • 具体如下:

      i=0开始,先做++i变为1;然后判断nums[i]是否小于2,以此类推

      直到发现nums[2]比2大,跳出循环。

      此时,下标i正好停在不符合条件的数的下标上

    • 结果:i=2但是注意,从i=0开始,由于先++,所以错过了第0个元素的比较

  • case3:

    while ((a = nums[i]) < 2){
        i++;
    }
    
    • 运算规则:正常跑就是了
    • 结果:i=2
    • 推荐使用,要比较的元素没有漏,坐标也不会加1,思路也不绕

调试代码

java code

package Test;

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        sumSum();

    }

    public static void sumSum() {
        /**
         * 1、while(++i)是先执行i+1,再进行判断,再执行循环体;
         * 2、while(i++)是先判断,再执行循环体,再+1
         * 循环结束后:while(++i)执行完后,i=0; while(i++)执行完后,i=1;
         */
        int[] nums = new int[]{0, 1, 2, 3, 4};
        System.out.println(Arrays.toString(nums));
        /**
         * i=0; nums[0] ?> 2; i+1; num[1] ?> 2; i+1; num[2] ?> 2, no; i+1;
         */
        int a;
        int i = 0;
        while ((a = nums[i++]) < 2) {
            System.out.println("i=" + i + ",a=" + a);
        }
        System.out.println(i);
        /**
         * i=0; i+1; nums[1] ?> 2; i+1; nums[2] ?> 2, no;
         */
        i = 0;
        while ((a = nums[++i]) < 2) {
            System.out.println("i=" + i + ",a=" + a);
        }
        System.out.println(i);
        /**
         * i=0; nums[0] ?> 2; i+1; num[1] ?> 2; i+1; num[2] ?> 2, no;
         */
        i = 0;
        while ((a = nums[i]) < 2) {
            i++;
            System.out.println("i=" + i + ",a=" + a);
        }
        System.out.println(i);

        System.out.println();

        int j = 4;
        while ((a = nums[j--]) > 2) {
            System.out.println("j=" + j + ",a=" + a);
        }
        System.out.println(j);
        j = 4;
        while ((a = nums[--j]) > 2) {
            System.out.println("j=" + j + ",a=" + a);
        }
        System.out.println(j);
        j = 4;
        while ((a = nums[j]) > 2) {
            j--;
            System.out.println("j=" + j + ",a=" + a);
        }
        System.out.println(j);
    }
}

C code

#include <stdio.h>
int main() {
	int nums[] = {0, 1, 2, 3, 4};
	int i = 0;
	while (nums[i++] < 2) {
		printf("i%d\n", i);
	}
	printf("%d\n",i);
	i = 0;
	while (nums[++i] < 2) {
		printf("i%d\n", i);
	}
	printf("%d\n",i);
	i = 0;
	while (nums[i] < 2) {
		i++;
		printf("i%d\n", i);
	}
	printf("%d\n",i);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值