黑马程序员技术交流社区
标题: 请教:该程序出现死循环的原因?字符串问题 [打印本页]
作者: HM朱蛟 时间: 2013-3-27 09:01
标题: 请教:该程序出现死循环的原因?字符串问题
本帖最后由 HM朱蛟 于 2013-3-27 09:42 编辑
求教:
这个是字符串的练习3的方法2
我看视频看了半天没看明白为何必须要加上index = index+str2.length(); 才行。
为何去掉了这句就是死循环呢?
思路:
(index=str1.indexOf(str2,index)这句
第一次str1.indexOf(str2,index)返回2,赋值给index=2;
第二次str1.indexOf(str2,2) 即从角标2开始查,查完后应该再返回个新值给index啊,搞不懂为何就死循环了,郁闷。
class Run
{
public static void main(String [] args)//MAIN:
{
String str = "abkkcdkkefkkskk";
System.out.println("总共出现的次数为:"+getStrCount(str,"kk"));
}
public static int getStrCount(String str1,String str2)
{
int count=0;
int index=0;
//2
while((index=str1.indexOf(str2,index))!=-1)//为何会出现死循环?
{
System.out.println("index="+index);
//index = index+str2.length(); //为何必须加上str2.length()才行?
count++;
}
return count;//总共出现了几次
}
}
作者: 丁一 时间: 2013-3-27 09:19
第一次str1.indexOf(str2,index)返回2,赋值给index=2;
第二次str1.indexOf(str2,2) 即从角标2开始查 返回的还是2 就在这里死循环了
所以应该加上字符串的长度 2 这样就从第4个开始查
作者: 孙宁 时间: 2013-3-27 09:23
str1.indexOf(str2,index)表示在str1中从第index下标位置起查找str2出现的位置,index是查找的起始位置,而且查找是包含index这个位置的, "abkkcdkkefkkskk"中第一次出现"kk"的位置是index=2,如果不加str2.length(),会继续从index=2处开始查找, 查到kk出现的位置依旧是index=2上那个kk,index始终都是2,陷入死循环.
作者: HM朱蛟 时间: 2013-3-27 09:24
本帖最后由 HM朱蛟 于 2013-3-27 09:29 编辑
丁一 发表于 2013-3-27 09:19 
第一次str1.indexOf(str2,index)返回2,赋值给index=2;
第二次str1.indexOf(str2,2) 即从角标2开始查 返回 ...
为何从角标2开始查还是返回2呢? 若从角标2查返回2 ,就和从角标0查就没区别了吧,对这个函数理解不是很好
函数原型:int indexOf(String str)
例子:str.indexOf(“kk”)//从头查找str字符串中的是否有”kk”字符串,若有返回第一次出现的角标位,若无返回-1.
函数原型:int indexOf(String str, int fromIndex)
例子:str.indexOf(“kk”,3)//查找str字符串中是否包含”kk”字符串,并且从str[3]为起点开始查找。若有返回第一次出现的角标位,若无返回-1.
作者: HM朱蛟 时间: 2013-3-27 09:31
孙宁 发表于 2013-3-27 09:23 
str1.indexOf(str2,index)表示在str1中从第index下标位置起查找str2出现的位置,index是查找的起始位置,而且 ...
哦 等于就是他在原地找自己啊?
作者: 丁一 时间: 2013-3-27 09:35
不管从几开始查 都返回的字符串的角标, 你从0 开始返回2,完你从2 开始 返回0 这样不乱套了
作者: 丁一 时间: 2013-3-27 09:35
HM朱蛟 发表于 2013-3-27 09:24 
为何从角标2开始查还是返回2呢? 若从角标2查返回2 ,就和从角标0查就没区别了吧,对这个函数理解不是很好 ...
不管从几开始查 都返回的字符串的角标, 你从0 开始返回2,完你从2 开始 返回0 这样不乱套了
作者: 孙宁 时间: 2013-3-27 09:39
HM朱蛟 发表于 2013-3-27 09:31 
哦 等于就是他在原地找自己啊?
对啊,可以这么理解,你的理解能力比我的表达能力强多了,:lol
作者: HM朱蛟 时间: 2013-3-27 09:41
感谢2位 大致明白了 最开始我没察觉key.length()的作用, 等于是从一开始查找到这个key字符串的位置加上他的length(),最后的结果始终是这个key字符串的前一位,没注意它还会自己原地找自己,这样理解能说通不呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |