嗨,我是编程/ Java的初学者,我正在尝试做一个简单的程序来计算一个字符串中的“char ch”,所以我在下面写了这个,我无法编译,任何人都可以让我知道为什么? :
public class StringProblems {
public int count(String s,char ch) {
int count;
int l =s.length();
char result =charAt(s);
for(int n=0; n<=l; n++){
if(result=='c') {
if(result == 'h') {
count ++;
}
}
return count;
}
}
}
答案 0 :(得分:4)
这显然是一个“错误计数”测试,或“修复错误”的问题 - 除非,在不知不觉中,你已经用如此简单的代码编写了几乎所有错误......
统计他们:
就个人而言,我会在没有错误的单行代码中安装一个..还可能还有一个用于方法/或类声明。
答案 1 :(得分:0)
这不是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;
}
这是有效的,因为它只检查字符串中的倒数第二个字符。如果字符串中的最后一个字符是c,则后面不能有h。如果您检查的其中一个字符是c,则可以在之后检查h。您可以通过使用for变量进行优化并在找到ch时将其递增1(因为下一次迭代无法找到ch),但是使用for counter var是一个坏主意。
现在我看一下你的函数参数(char ch),我想你正在寻找字符串s中的字符而不是“ch”中的字符,就像在“chihuaha”中一样。
如果是这样,那么你的函数可以通过以下方式找到字符串中的任何字符:
//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;
}
答案 2 :(得分:-1)
int count是一个局部变量,因此必须在使用前进行初始化。将它设置为零,你应该全部设置。