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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘家斌 中级黑马   /  2014-10-16 12:05  /  1592 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

这是毕老师视频里获得最大字串的事例,我·想知道这个for嵌套是怎么出来的,不是很理解,最好能注释下,谢谢了
  1.         public static String ziChuan(String str,String st)
  2.         {
  3.                 String max,min;
  4.                 max=(str.length()>st.length())?str:st;
  5.                 min=(max.equals(str))?st:str;
  6.                 for(int x=0;x<max.length();x++)
  7.                 {
  8.                         for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
  9.                         {
  10.                                 if(max.indexOf(min.substring(y,z))!=-1)
  11.                                         return min.substring(y,z);
  12.                         }
  13.                 }
  14.                 return " ";
复制代码

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

4 个回复

正序浏览
  1. public static String ziChuan(String str,String st)
  2.         {
  3.                 String max,min;
  4.                 max=(str.length()>st.length())?str:st;//比较两个字符串的长短,用max来存储长的字符串
  5.                 min=(max.equals(str))?st:str;//确定长的字符串之后,另一个是短的
  6.                 for(int x=0;x<min.length();x++)
  7.                                 //外圈控制比几次,但总次数不能超过短字符串的总长度.
  8.                 {
  9.                         for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
  10.                                                 //y=每次比较时,取字符串的起始位置.
  11.                                                 //z=每次比较时,取字符串的结束位置.
  12.                                                 //意思是每一轮外圈循环,内圈都从短字符串里,取一个固定长度的子字符串,用来跟长字符串比较.
  13.                                                 //minlength()-x,意思是外圈每循环一轮,x会+1,这样用来比较的字符串长度也就减少了一位.
  14.                                                 //内圈循环每比较一次,起始位置后移一位,结束位置也后移一位,直到结束位置等于短字符串的最大长度+1位置.
  15.                                                 //因为要取来比较的子字符串长度固定.超过就取不了了.
  16.                         {
  17.                                 if(max.indexOf(min.substring(y,z))!=-1)//用从短的字符串里取出来的子字符串跟长字符串比较,如果不等于-1,表示已经有匹配了,
  18.                                         return min.substring(y,z);//返回匹配的那个子字符串.
  19.                         }
  20.                 }
  21.                 return " ";
复制代码


回复 使用道具 举报
wf111sxwf 来自手机 中级黑马 2014-10-20 20:54:43
板凳
你的问题中当不断的缩小那个小字符串子串的长度的时候 ,子串的头角标于尾角标也在随之发生取值范围的改变所以要用循环嵌套,手机党写不了注释你就将就着理解吧
回复 使用道具 举报
wf111sxwf 来自手机 中级黑马 2014-10-20 20:50:49
藤椅
For循环嵌套简单说就是大圈套小圈,一个变量变化时有其他变量随之变化就要用到它。
回复 使用道具 举报
你还是先不要去想代码是怎么来的,你先思考如果是你做的话,你怎么做?用什么原理做,你想清楚了,自然就会用到双重for循环
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马