我是编程新手,我不太明白为什么我必须把str.length()-3。如果有人能给我解释一下就太好了。归来的猫==狗;(使用编码蝙蝠码)
public static boolean catDog(String str) {
int cats = 0;
int dogs = 0;
for (int i = 0; i < str.length()-3; i++) {
if (str.substring(i, i+3).equals("cat"))
cats += 1;
if (str.substring(i, i+3).equals("dog"))
dogs += 1;
}
我建议阅读for循环:http://www.w3schools.com/js/js_loop_for.asp
此迭代器使用第二个值作为循环的分隔符。它告诉循环应该继续循环多长时间。所以在你的例子中,你说的是直到字符串的总长度减去3。
所以如果str.length()
的长度是10,那么你会停在7
因为str.length()-3 == 7
。
这里有一个例子:
for (int i = 0; i < str.length() - 3; i++) { //starts the interation at i = 0
if (str.substring(0, 0 + 3).equals("cat")) cats += 1; //substring from your first character(character at Index[0] till your 3th character)
if (str.substring(0, 0 + 3).equals("dog")) dogs += 1; //substring from your first character(character at Index[0] till your 3th character)
}
如果您有一个字符串"helloWorld"
,您的程序将检查字符串"hel"oworld
的前3个字符,如果它们是"猫"或"狗"
之后你的for-loop
迭代下一个数字:
if (str.substring(1, 1 + 3).equals("cat")) cats += 1; //substring from your second character(character at Index[1] till your 4th character)
if (str.substring(1, 1 + 3).equals("dog")) dogs += 1; //substring from your second character(character at Index[1] till your 4th character)
}
在我们的helloWorld
示例中,程序将检查h"ell"oWorld
是否为"cat"或"dog"…之后,迭代再次递增,以此类推…
你在一个更大的字符串中寻找3个字符的字符串。在搜索字符串的倒数第二个字符处找到字符串"cat"的可能性有多大?这就是- 3
的作用
也许如果我为您提取一个命名良好的变量:
for (int i = 0; i < str.length() - 3; i++) {
String threeCharactersStartingAti = str.substring(i, i + 3);
if (threeCharactersStartingAti.equals("cat")) cats += 1;
if (threeCharactersStartingAti.equals("dog")) dogs += 1;
}
然后解释代码正在查看从位置i
开始的3个字符。因此,对于长度为5的字符串"ABCDE"
,循环中的值将为:
i=0 => threeCharactersStartingAti = "ABC"
i=1 => threeCharactersStartingAti = "BCD"
i=2 => threeCharactersStartingAti = "CDE"
就是这样,我不想继续了因为对于i>=str.length()-3
,字符串中没有足够的字符来得到3