黑马程序员技术交流社区
标题:
还是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