我正试图解决这个问题,但似乎没有任何效果。我试图寻找问题,但所有其他的答案使用方法或数组,我们还没有研究他们,所以我只能解决循环的问题。问题是:
编写一个程序,返回一个字符串在另一个字符串中出现的次数。
例如
输入:
第一个字符串:
第二条:学生们在工程学院努力学习,因为他们热爱工程
输出:
三
这就是我所尝试的:
Scanner input = new Scanner(System.in);
String s1 = input.nextLine();
String s2 = input.nextLine();
int count = 0;
String text="";
for(int i = 0; i<s1.length(); i++){
for(int j =0; j<=s2.length() ; j++){
if(s1.charAt(i)==s2.charAt(j) && i ==0){
for(int m=1; m<s1.length();m++){
if(s1.charAt(i+1)==s2.charAt(j+1)){
if(m==s1.length()){
count++;
}else{
break;
}
}
}
}
}
}
System.out.println(count);
我想我的逻辑有问题。这就是我的想法:程序应该检查第一个字符串的第一个字母,然后检查它是否等于第二个字符串的第一个字母,如果它不等于它,那么程序应该在第二个字符串中循环,直到它找到一个等于第一个字符串的第一个字母,如果它找到一个等于第一个字符串的字母,它会检查第一个字符串的第二个字母是否等于另一个字符串的下一个字母,如果是,它会检查第一个字符串的最后一个字母,如果是,那么计数增加1,如果不是,它会循环下一个字符。我试着用一些其他的方法来实现我的代码。有人能帮我解释一下逻辑吗?
1条答案
按热度按时间b0zn9rqh1#
程序应该检查第一个字符串的第一个字母,然后检查它是否等于第二个字符串的第一个字母,
好 啊
如果它不等于它,那么程序应该在第二个字符串中循环,直到找到一个与第一个字符串的第一个字母相等的字母,
如果这是您想要做的,那么遍历s2应该是最外层循环的基础。但您编写它时将遍历s1作为最外层的循环。
如果它找到一个等于第一个字符串的字母,它会检查第一个字符串的第二个字母是否等于另一个字符串的下一个字母,如果是,它会检查第一个字符串的最后一个字母,如果是,那么计数增加1,如果不是,它会循环下一个字符。
好 啊。所以你只需要一个索引到s2(外循环),一个索引到与s1(内环)的潜在匹配中。除此之外你不需要另一个循环。
最后要注意的是,外部循环索引(遍历s2)加上内部索引(遍历潜在匹配)的总和不能超过s2的界限。正如您现在所写的,它可以超过字符串长度,事实上确实如此。