精华内容
下载资源
问答
  • for循环嵌套的两种用法

    万次阅读 多人点赞 2016-10-29 19:09:20
    主要有两种类型的for循环嵌套,下面来介绍这两种类型循环嵌套的用法以及事例。 一:内外循环独立进行 #include void main() { int i,j; char a[5]="$$$$$"; for(i=0;i;i++) { for(j=0;j;j++) ...

      本人今后不定期在CSDN上更新博客,大部分内容将会更新在个人博客:www.lijugang.com中!

    主要有两种类型的for循环嵌套,下面来介绍这两种类型循环嵌套的用法以及事例。

    一:内外循环独立进行

    #include<stdio.h>
    void main()
    	{
    		
    		int i,j;
    		char a[5]="$$$$$";
    		for(i=0;i<5;i++)
    		{
    			for(j=0;j<5;j++)
    			printf("%c",a[j]);
    			printf("\n");
    		}
    			
    	}

    二:内部循环依赖于外部循环

    #include<stdio.h>
    void main()
    	{
    		
    		int i,j;
    		char a[5]="$$$$$";
    		for(i=0;i<5;i++)
    		{
    			for(j=0;j<=i;j++)
    			printf("%c",a[j]);
    			printf("\n");
    		}
    			
    	}

            第一种方式中,内部循环进行5次,外部循环也进行5次,相当于外部循环把内部循环的结果打印了5次,为什么呢?因为内部循环的条件是固定的(j<5),每次外部循环,内部循环都要进行5次,效果大家可想而知。第二种方式中,当外部循环进行第一次时,即i=0时,由于内部循环的条件为j<=i,此时0<=0,满足循环条件,在这种方式中,内部循环的条件每次都是变化的。因此,当外部循环进行一次时,内部循环进行打印出数组a[5]中的第一个元素a[1],即打印出一个$。以此类推打印出了a[5]中的所有元素。

           以下是两种方式打印的结果:



    推荐一个不错的博主,里面有很全面的全栈开发内容,https://how2j.cn/k/control-flow/control-flow-if/271.html?p=149636

     

    展开全文
  • Kettle实现循环有两种方式

    千次阅读 2018-02-09 15:46:08
    Kettle实现循环有两种方式:一种是在Job中引用Transformation时,可通过设置Transformation 的高级属性(”执行每一个输入行”)来实现Transformation 的循环,具体例子可以参考下面的链接:Kettle实现...

    Kettle实现循环有两种方式:

    一种是在Job中引用 Transformation时,可通过设置Transformation 的高级属性(”执行每一个输入行”)来实现Transformation 的循环,具体例子可以参考下面的链接:

    Kettle实现Transformation 循环及跳出


    另一种方式是通过job中的"Evaluatiing Javascript" 和 "校验字段的值"两个控件实现循环, 具体例子可以参考下面的链接:

    Kettle 作业步骤循环执行的实现  

    展开全文
  • 原文地址:循环HashMap的两种方法效率比较 循环HashMap两种方法的效率比较 1.第一种方式 Java代码 Iterator&lt;String&gt; keySetIterator = keySetMap.keySet().iterator(); while (keySetIterator....

     原文地址:循环HashMap的两种方法效率比较

    循环HashMap两种方法的效率比较

    1.第一种方式

    Java代码

    Iterator<String> keySetIterator = keySetMap.keySet().iterator();
    while (keySetIterator.hasNext()) {
    String key = keySetIterator.next();
    String value = keySetMap.get(key);
    }
    


    2.第二种方式

    Java代码

    Iterator<Entry<String, String>> entryKeyIterator = entrySetMap.entrySet().iterator();
           while (entryKeyIterator.hasNext()) {
                Entry<String, String> e = entryKeyIterator.next();
                String value=e.getValue();
     }
    


    三.性能比较

        到底第二种方式的性能比第一种方式的性能高多少呢,通过一个简单的测试类可以看一下,测试代码如下:

    Java代码

    public class HashMapTest {   
    
        public static void main(String[] args) {   
    
            HashMap<String, String> keySetMap = new HashMap<String, String>();  
    
            HashMap<String, String> entrySetMap = new HashMap<String, String>();  
    
            for (int i = 0; i < 1000; i++) {   
    
                keySetMap.put("" + i, "keySet");   
    
            }   
    
            for (int i = 0; i < 1000; i++) {   
    
                entrySetMap.put("" + i, "entrySet");   
    
            }   
    
            long startTimeOne = System.currentTimeMillis();   
    
            Iterator<String> keySetIterator = keySetMap.keySet().iterator();  
    
            while (keySetIterator.hasNext()) {   
    
                String key = keySetIterator.next();   
    
                String value = keySetMap.get(key);   
    
                System.out.println(value);   
    
            }   
    
            System.out.println("keyset spent times:"   
    
                    + (System.currentTimeMillis() - startTimeOne));  
    
            long startTimeTwo = System.currentTimeMillis();   
    
            Iterator<Entry<String, String>> entryKeyIterator = entrySetMap  
    
                    .entrySet().iterator();   
    
            while (entryKeyIterator.hasNext()) {   
    
                Entry<String, String> e = entryKeyIterator.next();   
    
                System.out.println(e.getValue());   
    
            }   
    
            System.out.println("entrySet spent times:"   
    
                   + (System.currentTimeMillis() - startTimeTwo));   
    
        }   
    
    }   
    


    通过测试发现,第二种方式的性能通常要比第一种方式高一倍.

    四.原因分析:

      通过查看源代码发现,调用这个方法keySetMap.keySet()会生成KeyIterator迭代器,其next方法只返回其key值.

    Java代码

    private class KeyIterator extends HashIterator<K> {   
    
        public K next() {   
    
             return nextEntry().getKey();   
    
      }   
    
     }   
    
     private class KeyIterator extends HashIterator<K> {
    
    public K next() {
    
    return nextEntry().getKey();
    }
    }


    而调用entrySetMap.entrySet()方法会生成EntryIterator 迭代器,其next方法返回一个Entry对象的一个实例,其中包含key和value.

    Java代码

    private class EntryIterator extends HashIterator<Map.Entry<K,V>> {   
    
           public Map.Entry<K,V> next() {   
    
               return nextEntry();   
    
           }   
    
     }   
    
     private class EntryIterator extends HashIterator<Map.Entry<K,V>> {
    
    public Map.Entry<K,V> next() {
    
    return nextEntry();
    
    }
    
    }


    二者在此时的性能应该是相同的,但方式一再取得key所对应的value时,此时还要访问Map的这个方法,这时,方式一多遍历了一次table.

    Java代码

    public V get(Object key) {   
    
            Object k = maskNull(key);   
    
            int hash = hash(k);   
    
            int i = indexFor(hash, table.length);   
    
            Entry<K,V> e = table[i];    
    
            while (true) {   
    
                if (e == null)   
    
                    return null;   
    
                if (e.hash == hash && eq(k, e.key))    
    
                    return e.value;   
    
                e = e.next;   
    
            }   
    
        }   
    
    public V get(Object key) {
    
    Object k = maskNull(key);
    
    int hash = hash(k);
    
    int i = indexFor(hash, table.length);
    
    Entry<K,V> e = table[i];
    
    while (true) {
    
    if (e == null)
    
    return null;
    
    if (e.hash == hash && eq(k, e.key))
    
    return e.value;
    
    e = e.next;
    
    }
    
    }
    


    这个方法就是二者性能差别的主要原因.

    来自惊讶:https://www.52jingya.com/aid20.html

    展开全文
  • 二分法查找是经典算法,这篇博客用循环和递归两种反方式实现了二分法查找。这篇博客完整的代码实现以及查找过程的文字详述。

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。

    这博客是对自己学习的一点点总结及记录,如果您对 Java算法 感兴趣,可以关注我的动态,我们一起学习。

    用知识改变命运,让我们的家人过上更好的生活

    相关文章

    点此查看 【算法系列】 博客文章


    1、二分法查找的背景

    当数组或者集合中存放的元素数量非常多的时候,想要跟踪具体某个元素的位置或者是否存在,常规方式是循环每一个元素直到找到要查找的元素为止。这样的查找方式效率非常低下,这个时候需要使用二分法来实现,提高查找效率。

    2、二分法查找的介绍

    二分法查找(折半查找),找指定数值所在的位置

    百度百科是这样介绍二分法查找的:
    在这里插入图片描述

    3、二分法查找的算法思想

    假设数组是按升序排序的,对于给定的目标值aim,从数组的中间位置开始查找:
    1.若查找数据与中间元素值正好相等,则返回中间元素值的索引;
    2.若查找数值比中间值小,则以整个查找范围的前半部分作为新的查找范围;
    3.若查找数值比中间值大,则以整个查找范围的后半部分作为新的查找范围;
    注:查找成功返回索引,失败返回-1

    4、代码实现

    4.1 利用循环的方式实现二分法查找

    public class BinarySearch {
        public static void main(String[] args) {
            // 生成一个随机数组
            int[] array = suiji();
            // 对随机数组排序
            Arrays.sort(array);
            System.out.println("产生的随机数组为: " + Arrays.toString(array));
    
            System.out.println("要进行查找的值: ");
            Scanner input = new Scanner(System.in);
            // 进行查找的目标值
            int aim = input.nextInt();
    
            // 使用二分法查找
            int index = binarySearch(array, aim);
            System.out.println("查找的值的索引位置: " + index);
    
        }
    
        /**
         * 生成一个随机数组
         * 
         * @return 返回值,返回一个随机数组
         */
        private static int[] suiji() {
            // random.nextInt(n)+m  返回m到m+n-1之间的随机数
            int n = new Random().nextInt(6) + 5;
            int[] array = new int[n];
            // 循环遍历为数组赋值
            for (int i = 0; i < array.length; i++) {
                array[i] = new Random().nextInt(100);
            }
            return array;
        }
    
        /**
         * 二分法查找  ---循环的方式实现
         * 
         * @param array 要查找的数组
         * @param aim 要查找的值
         * @return 返回值,成功返回索引,失败返回-1
         */
        private static int binarySearch(int[] array, int aim) {
            // 数组最小索引值
            int left = 0;
            // 数组最大索引值
            int right = array.length - 1;
            int mid;
            while (left <= right) {
                mid = (left + right) / 2;
                // 若查找数值比中间值小,则以整个查找范围的前半部分作为新的查找范围
                if (aim < array[mid]) {
                    right = mid - 1;
                    // 若查找数值比中间值大,则以整个查找范围的后半部分作为新的查找范围
                } else if (aim > array[mid]) {
                    left = mid + 1;
                    // 若查找数据与中间元素值正好相等,则放回中间元素值的索引
                } else {
                    return mid;
                }
            }
            return -1;
        }
    }
    
    

    代码执行结果:

    产生的随机数组为: [16, 33, 40, 46, 57, 63, 65, 71, 85]
    要进行查找的值: 
    46
    查找的值的索引位置: 3
    
    

    若输入的值找不到,则返回-1

    产生的随机数组为: [28, 41, 47, 56, 70, 81, 85, 88, 95]
    要进行查找的值: 
    66
    查找的值的索引位置: -1
    

    4.2 利用递归的方式实现二分法查找

    public class BinarySearch2 {
        public static void main(String[] args) {
            // 生成一个随机数组
            int[] array = suiji();
            // 对随机数组排序
            Arrays.sort(array);
            System.out.println("产生的随机数组为: " + Arrays.toString(array));
    
            System.out.println("要进行查找的值: ");
            Scanner input = new Scanner(System.in);
            // 进行查找的目标值
            int aim = input.nextInt();
    
            // 使用二分法查找
            int index = binarySearch(array, aim, 0, array.length - 1);
            System.out.println("查找的值的索引位置: " + index);
        }
    
        /**
         * 生成一个随机数组
         *
         * @return 返回值,返回一个随机数组
         */
        private static int[] suiji() {
            // Random.nextInt(n)+m  返回m到m+n-1之间的随机数
            int n = new Random().nextInt(6) + 5;
            int[] array = new int[n];
            // 循环遍历为数组赋值
            for (int i = 0; i < array.length; i++) {
                array[i] = new Random().nextInt(100);
            }
            return array;
        }
    
        /**
         * 二分法查找 ---递归的方式
         *
         * @param array 要查找的数组
         * @param aim   要查找的值
         * @param left  左边最小值
         * @param right 右边最大值
         * @return 返回值,成功返回索引,失败返回-1
         */
        private static int binarySearch(int[] array, int aim, int left, int right) {
            if (aim < array[left] || aim > array[right]) {
                return -1;
            }
            // 找中间值
            int mid = (left + right) / 2;
            if (array[mid] == aim) {
                return mid;
            } else if (array[mid] > aim) {
                //如果中间值大于要找的值则从左边一半继续递归
                return binarySearch(array, aim, left, mid - 1);
            } else {
                //如果中间值小于要找的值则从右边一半继续递归
                return binarySearch(array, aim, mid + 1, array.length-1);
            }
        }
    }
    
    

    递归相较于循环,代码比较简洁,但是时间和空间消耗比较大,效率低。在实际的学习与工作中,根据情况选择使用。

    上一篇 经典算法(1)冒泡排序及其优化

    下一篇 算法(3)Java实现将字符串中指定部分进行反转

    展开全文
  • 详述 Java 语言中的两种 for 循环

    千次阅读 2017-03-31 09:37:01
    而 for 循环其实还有两种实现方法,对于初学者来说,或许仅知道一般的 for 循环,即:for(初始化条件; 限制条件; 迭代语句) { // 循环体 }而不太了解高级的 for 循环,即:for(变量类型 变量名 : 集合) { // 循环...
  • java 中for循环两种用法

    千次阅读 2018-07-12 11:46:30
    java 中的for循环嵌套的两种用法,下面展示了示例代码:第一种:内外独立循环,意思就是外层循环和内层循环互相干扰,内层循环不依赖于外层循环。例子:用"*"输出一个正方形,代码如下:结果如下图:第二...
  • 1、// adapter.getCheckBox()是获得从adapter中返回的Arrayliset数组;dao.save()是保存获得数据 for (int i=0;i().size();i++){ dao = new ContactsDao...顺便说说两种方式的应用场景什么不同?
  • Python取日期范围循环操作的两种方法 今天在用Python跑一个数据时,需要遍历一个日期范围,于是在网上找到如下可用的代码,记录一下。
  • JS中for循环两种写法

    千次阅读 2020-10-12 11:57:36
    第一: 最常见普遍的写法,适用于多种语言 for(let i = 0; i < 10 ; i++){ console.log(i); } 打印结果: 第二: 较第一比较简单方便 const todo = [ { id : '1', name : 'zhangsan', age : '20', ...
  • Kettle实现循环两种方法

    万次阅读 2014-12-09 08:06:58
    Kettle实现循环有两种方式: 一种是在Job中引用Transformation时,可通过设置Transformation 的高级属性(”执行每一个输入行”)来实现Transformation 的循环,具体例子可以参考下面的链接: Kettle实现...
  • Vue控制v-for循环次数的两种方法

    万次阅读 2019-04-16 10:25:45
    在Vue中的遍历方法v-for控制循环次数的方法可以通过以下两种方法 1、通过html的标签里面v-if对超出范围的进行隐藏 <div v-for="(item,index) in courselist" v-if="index < 6" :key='index'></div>...
  • JAVA跳出多重循环两种方法

    千次阅读 2019-03-30 21:27:35
    JAVA中,多重循环(多个FOR),如果只在其中一个循环中break那么,只能跳出...直接跳出个for循环,到STOP: package com.csdn.myEnum; public class hello { public static void main(String[] args) { ...
  • Java数组实现循环队列的两种方法

    万次阅读 2018-08-28 20:49:35
    用java实现循环队列的方法: 1、增加一个属性size用来记录目前的元素个数。目的是当head=rear的时候,通过size=0还是size=数组长度,来区分队列为空,或者队列已满。 2、数组中只存储数组大小-1个元...
  • 转载:Golang——for循环两种用法

    千次阅读 2019-07-28 15:08:27
    Golang——for循环两种用法 PS,作者写的简单易懂明确。只是讲 go 的二种 for 循环。 06 August 2014 一般语言都支持两种遍历方式,这里做下介绍。最后介绍一个 For Range 不恰当的使用引起的 Bug。 从大一...
  • java跳出多层for循环两种方法

    千次阅读 2019-04-28 14:02:42
    java跳出多层for循环两种方法 一 ok: for (int i = 0; i &amp;lt; 10; i++) { System.out.println(&quot;i= &quot; + i); for (int i1 = 0; i1 &amp;lt; 10; i1++) { System.out.println(&...
  • 在for循环中,循环控制变量的初始化和修改都放在语句头部分,形式较简洁,且特别适用于循环次数已知的情况。在while循环中,循环控制变量的初始化一般放在...两种形式各优点,但它们在功能上是等价的,可以相互转换。
  • JAVA中for循环两种遍历方式

    千次阅读 2015-01-02 20:36:40
    在C语言中,我们就学过for循环,同样的,JAVA中也for循环,但是JAVA中的for循环分为两种,一种是和C语言中的for循环相同,另一种称作for-each循环。 对比如下: 我们假设data数组中存了这样几个数:{1,2,3,4,5} ...
  • java基础--两种简单的死循环程序

    千次阅读 2017-05-24 19:54:22
    循环语句: 第一: while(true){  循环体语句; } 第二: for(;;){ 循环体语句; }
  • JXLS生成Excel中循环两种用法

    万次阅读 2013-12-10 14:58:48
    在jxls操作excel文件一文中,提到可以使用进行迭代处理,JXLS中还有另一种循环方式,且看如下示例。  Excel模板如下所示:  现有类Staff,内容如下所示: /** * */ package com.geloin.jxls.beans; /**...
  • 关于字符串循环遍历的两种方法

    千次阅读 2018-08-05 21:12:00
    s="张三李四王五赵柳还有我"# n=0# while n < len(s): #计数函数最大的好处能动态的计算字符串的额长度# print(s[n])# n=n+1for c in s: print(c) 转载于:https://www.cnblogs.com/zhuhaofeng/p/9427196.html...
  • java中循环HashMap的两种方法

    千次阅读 2011-08-04 17:38:59
    时候我们需要遍历HashMap,打印出key和value的值,这里提供两种方法:   private static void printMap(HashMap map) { //第一种方法: Iterator iterator =
  • egret循环播放动画的两种方法

    千次阅读 2018-12-28 16:12:34
    --在你需要循环播放的动画的位置加进去--&gt; &lt;tween:props&gt; &lt;e:Object loop="true"/&gt; &lt;/tween:props&gt; &lt;!--如--&gt; ...
  • 记录下在开发月历显示时,客户要求需要把取消的例会在月历上排除掉,下面张贴下两种排除方式的比较,第二种逻辑上是错误的,会出现重复。其实原因还是自己的逻辑性思维不够好。 第一种,正确: //排除被取消的...
  • C语言两种for循环写法分析

    万次阅读 2013-01-09 18:56:19
    每个C程序员都知道同一个for循环语句可以有两种写法: A: for (i = 0; i  B: for (i = cnt; i > 0; i--){ } 前几天,DEBUG的时候, 发现采用A写法的代码反汇编出来BUG.当时没有时间记录,环境也...
  • 在做用户菜单权限的时候(因为多张表关联外键,hibernate返回回去会出现无限循环),所以把他转换成和数据库无关的VO类即可 一 、VO类如下 ** * * * 封装菜单的树形结构 * @author 六松岛福小林 * **/ public ...
  • C++map容器循环两种方式

    千次阅读 2018-04-13 20:21:38
    //第一方式访问 利用迭代器 for (map&lt;int, int&gt;::iterator it = mapNum.begin(); it != mapNum.end();it++) //第二方式访问 利用c++11新特性auto mapNum.insert(pair&lt;int, int&...
  • C语言循环和递归两种方法求n的阶乘

    万次阅读 2015-12-23 15:31:00
    // 循环法求阶乘 int sum1(n) { int sum = 1; for (int i = 1; i ; i++) { sum = sum*i; } return sum; } // 递归法求阶乘 int sum2(n) { int sum=0; if (n) printf_s("error\n"); else if (n == 0 || n
  • for(;;)和while(1)两种循环的区别

    万次阅读 2017-02-16 22:46:11
    )和while(1)两种循环的区别: 1、 for(;;)死循环里的两个;;代表两个空语句,编译器一般会优化掉它们,直接进入循环体。 while(1)死循环里的1被看成表达式,每循环一次都要判断常量1是不是等于零。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,388,407
精华内容 555,362
关键字:

循环有哪两种循环