for循环中i--的妙用 及 两变量互换数值的问题

int[] array = new int[4];
for(int i = 0; i < array.length; i++){
    array[i] = (int)(Math.random() * 10);

    for(int j = 0; j < i; j++){
        if(array[i] == array[j]){         //相同就重取随机数
            i--;
            break;
        }
    }
}

以上是一段取四个不相等随机数的代码,这里的 i-- 是这段代码的核心。

在内层for循环中,一旦 array[i] == array[j] 就执行 i-- 。这意味着外层for循环在本次循环结束之后,i++会因为i--的出现而 不执行本次自增,相当于重新执行上次循环。从而达到了取 不相等 随机数的功能。

对于两变量互换数值的问题,相信大家已经遇到不少。这里提出另外两种方法:

方法一:

a = a + b;
b = a - b;
a = a - b; 

方法二:

a = a ^ b;
b = a ^ b;
a = a ^ b;
时间: 2024-10-23 08:03:30

for循环中i--的妙用 及 两变量互换数值的问题的相关文章

for 循环中 i++和 ++i

在标准C语言中, i++和 ++i的区别显而易见. 但是,当在for循环中使用 i++和 ++i的时候,会发现.只要这两种语句不用来赋值操作(作为右值,赋值给左值),那么这两种写法其实是一样的. for中其实不管是i++或++i都是在for循环体全部执行完毕后才执行, 如: for(int i = 0;i < 10; i++){System.out.println(i);}等同于for(int i = 0;i < 10; ){System.out.println(i);            

循环中的let和const声明

一.循环中的let声明 每次循环的时候let声明都会创建一个新变量i,并将其初始化为i的当前值,所以循环内部创建的每个函数都能得到属于他们的i的副本. 最初的: for (var i = 0 ; i < 10 ; i++) { array.push(function(){    console.log(i) })  };    array.forEach(function(func){         func()    }) 优化后: var array=[];   for (var i =

for循环中Ajax 单线程

今儿调试发现一个有趣的小问题:网上海搜~~上代码var i;for(i=0;i<10;i++){      ajaxServise(i);} 在for循环中调用ajax方法  补充页面上的数据,这样写是错误的,他不会每执行一次for循环就执行一次ajax方法,而是等for循环结束才去执行ajax方法,所以导致ajax只被执行一次.然而当修改如下: for(i=0;i<10;i++){      alert("aa");      ajaxServise(i);}与上面不同的

vue 如何在循环中 &quot;监听&quot; 的绑定v-model数据

vue 如何在循环中 "监听" 的绑定v-model数据 阅读目录 vue 如何在循环中 "监听" 的绑定v-model数据 1. 普通属性的值进行监听 2. 监听对象的变化 3. 监听对象中具体属性值的变化 4. vue 如何在循环中 "监听" 的绑定v-model数据 回到顶部 1.普通属性的值进行监听 vue中提供了一个watch方法,它用于观察vue实列上的数据变动,来响应数据的变化. 下面我们来分别学习下使用watch对对象的属性值进行

for循环中的if和switch选择结构由break改变状态的差异

1 #include <cstdio> 2 int main(){ 3 for(int i=0;i<5;i++){ 4 if(i==2) break; 5 printf("%d\n",i) ; 6 } 7 printf("****\n"); 8 for(int i=0;i<5;i++){ 9 switch(i){ 10 case 2:break; 11 } 12 printf("%d\n",i) ; 13 } 14 } 输

23 24 25 py中break和continue 循环中的else语句 exec和eval函数

第十课 跳出循环(break和continue) break :退出整个循环 不执行循环下面的其他语句 continue:忽略continue后面的所有的语句 然后会转向执行下一次的循环 也就是会执行下面的语句的 # coding:utf-8 x = 0 while x < 12: print(x,end = ',') x +=1 # 结果Wie : 0,1,2,3,4,5,6,7,8,9,10,11, print() y = 0 while y < 12: if y == 5: break;

JS for循环中的label

let num = 0; for (let i = 0; i < 10; i ++) { for (let j = 0; j < 10; j ++) { if (i === 5 && j === 5) { break; } num ++; } } console.log(num); // 95 条件成立break跳出的是内部的循环 如果条件成立要跳出全部循环该怎么做? let num = 0; out: for (let i = 0; i < 10; i ++) { fo

javascript解决for循环中i取值的问题(转载)

html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> //面试经典问题: function onMyLoad(){ /* 抛出问题: 此题的目的是想每次点击对应目标时弹出对应的数字下标

Linux gcc for 循环中 i=i++ 会造成死循环问题及 ++i / i++ 汇编分析

在把 Windows 程序移植到 Linux 时遇到了死循环,最后定位到了类似这种的语句 for (i = 0; i < 1; i = i++), 别问我是谁写的,为什么这么写(泪目!). 根据C语言的常识, i = i++ 应该等价于 i++, Windows 上确实是这样,但 Linux 不是,这应该是编译器差异造成的. --------------------------------------- 可 i 的分割线 No.0 --------------------------------