黑马程序员技术交流社区

标题: 还是for循环 [打印本页]

作者: 骑着乌龟去旅行    时间: 2014-12-2 18:59
标题: 还是for循环
for (int i = 0; i < str.length(); i++)
        {
        for(int start=0, end=str.length()-i;end != str.length()+1;start++,end++)
        {
        
        }
        }

我想问一下,这个end 的数值是怎么变换的,我怎么感觉没变呢,前面随着 i 减少了,后面有自增 1。

哎,都没人回答我的,是不是都觉得太简单了而不屑于回答的,这个我还真是一时没搞明白呢

作者: 大大的心    时间: 2014-12-2 19:00
问题不明确啊大哥!!
作者: 提米特    时间: 2014-12-2 21:02
你这里是两个循环,end的值只在内循环里面变化。

end的初值是str.length()-i,循环结束的条件是end == str.length()+i,每次end自增1.

看2个变量影响的循环,必须先固定一个变量,才能看另一个变量的变化,并且外循环每次执行一次,i的值就固定了,只有i的值固定的时候你才能具体问题具体分析,来看end的值的变化规律
作者: wtjohn    时间: 2014-12-2 21:12
大圈小圈,你小圈循环一边,然后大圈才开始下一轮。
作者: Smart_lll    时间: 2014-12-2 21:47
本帖最后由 Smart_lll 于 2014-12-2 22:14 编辑

如果你的代码内层循环没有使用到start时,它的存在是没有意义的,可以将代码简化为以下的形式(方便阅读):
  for (int i = 0; i < str.length(); i++)
        {
             for(int end=str.length()-i;  end != str.length()+1;  end++) {  }
        }
        从以上代码中可以看出,每次执行内循环,开始时的end值是不同的,并且随着i值的增大而在减小,然后通过内循环for中的表达式end++,最后在内循环结束时将传进来的end值多加1([size=13.9130439758301px]因为内循环执行完成后,最后又执行了一次end++);但是在内循环输出end值时,应该是str.length()。
       通过多次分析代码可知,内循环执行的次数总是 i,因此内循环中最后的值是[size=13.9130439758301px][size=13.9130439758301px]str.length(),但内循环执行结束后end的值却是str.length()-i+(i+1),即str.length()+1(因为内循环执行完成后,最后又执行了一次end++);其实通过内循环的条件表达式就可以知道,当end=str.length()+1时,内循环结束。所以内循环中的end的最终值为:[size=13.9130439758301px]str.length()。
       由此可见,每次执行完内循环体,end的值是相同的;但[size=13.9130439758301px]只有第一次是传进内循环的end与内循环结束时内循环中的end值相同,(个人理解,有错误请指出,谢谢!:))
作者: Mr.Ni    时间: 2014-12-2 21:53
自己举例啊,手写一下运算过程啊
比如长度为10
i=0时,end=10-0=0,10!=10+1,end++执行一次为11,内循环结束
i=1时,end=10-1=9,满足,end++为10,满足,end++为11,内循环结束
i=2时,end=10-2=8,满足,end++为9,满足,end++为10,满足,end++为11,内循环结束
就这样啊,这个是获取最大相同子串的问题里面的?
作者: 清诗纪事    时间: 2014-12-2 21:59
比如说:
当i=0时,内层循环开始执行
start=0,end=str.length-i也就是end=str.length,end!=str.length+1,start++,end++
然后start=1,end=str.length+1直接就跳出循环了
作者: Smart_lll    时间: 2014-12-2 22:15
Smart_lll 发表于 2014-12-2 21:47
如果你的代码内层循环没有使用到start时,它的存在是没有意义的,可以将代码简化为以下的形式(方便阅读):
...

为什么会出现这个[size=13.9130439758301px],看的时候自行屏蔽,我没办法去掉!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2