A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 骑着乌龟去旅行 中级黑马   /  2014-12-2 18:59  /  1531 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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。

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

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

7 个回复

倒序浏览
问题不明确啊大哥!!
回复 使用道具 举报
你这里是两个循环,end的值只在内循环里面变化。

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

看2个变量影响的循环,必须先固定一个变量,才能看另一个变量的变化,并且外循环每次执行一次,i的值就固定了,只有i的值固定的时候你才能具体问题具体分析,来看end的值的变化规律
回复 使用道具 举报
大圈小圈,你小圈循环一边,然后大圈才开始下一轮。
回复 使用道具 举报
本帖最后由 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值相同,(个人理解,有错误请指出,谢谢!:))

评分

参与人数 1技术分 +1 收起 理由
船长 + 1 码字不容易,有真见解,妙!

查看全部评分

回复 使用道具 举报
自己举例啊,手写一下运算过程啊
比如长度为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,内循环结束
就这样啊,这个是获取最大相同子串的问题里面的?
回复 使用道具 举报
比如说:
当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 21:47
如果你的代码内层循环没有使用到start时,它的存在是没有意义的,可以将代码简化为以下的形式(方便阅读):
...

为什么会出现这个[size=13.9130439758301px],看的时候自行屏蔽,我没办法去掉!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马