这不是 C。C 通常传递对象并对其执行操作。在 Java 和大多数面向对象的语言中,您通常要求对象为您做某事。这是通过以下语法完成的:
object.doThis(parameter1, parameter2);
做这个:
public class StringProblems {
public int count(String s,char ch) {
int count = 0; //initialize the variable
int l =s.length();
//char result =charAt(s); //don't need this. It should be **in** the loop
for(int n=0; n < l; n++){ //changed to <. <= will give you an index out of range
//runtime error
char result = String.charAt(n); //moved the call to here
if(result=='c') {
if(result == 'h') {
count ++;
}
}
}
return count;
}
}
此外,这永远不会起作用,因为 char 只能保存一个值。它永远不会同时是 c 和 h。
更像这样的循环可以检测“ch”组合。
public int count(String s,char ch) {
int count = 0;
int l =s.length();
//char result =charAt(s); //don't need this. It should be **in** the loop
for(int n=0; n < l - 1; n++){
char first = String.charAt(n); //moved the call to here
if(first=='c') {
char second = String.charAt(n+1); //check the character right after 'c'
if(second == 'h') {
count ++;
}
}
}
return count;
}
这是有效的,因为它只检查字符串中倒数第二个字符。如果字符串中的最后一个字符是 ac,则后面不能有 h。如果您检查的字符之一是 ac,则在之后检查一个 h。您可以通过使用 for 变量并在找到 ch 时将其增加 1 来优化这一点(因为下一次迭代找不到 ch),但是弄乱 for 计数器 var 是一个坏主意。
现在我查看了您的函数参数(char ch),我想您正在寻找字符串 s 中的字符,而不是像在“chihuaha”中一样寻找“ch”。
如果是这样,那么您的函数可以通过以下方式找到字符串中的任何字符:
//counts the number of times ch appears in s
public int count(String s,char ch) {
int l =s.length();
for(int n=0; n < l; n++){
char result = String.charAt(n); //call inside the loop
if(first==ch) {
count ++;
}
}
return count;
}