我今年参加了在线AP计算机科学课程,我们刚刚开始使用Strings及其相关的相关方法。本周我的任务的一部分是完成一些CodingBat String 3练习题,而且我被困在sumNumbers上。这段代码应该带一个字符串并在其中添加所有数字(不是数字)。例如," 13tet6"应该输出19.我评论了我的代码,以显示我认为这个代码应该如何运行。
public int sumNumbers(String str) {
int place, length, sum;
length = str.length(); //Gets length of string
place=0;
sum=0;
String number = "";
while(place<length){ //This loop will stop when we reach the last character of the string
while(Character.isDigit(place)){ //This checks if the char at place is a digit
number+=str.charAt(place); //If so it adds it to the String number
place++; //This moves along the string to check the next character
}
if(!(number=="")) //This will only add the number to the sum if it has a number stored
sum+=Integer.parseInt(number); //This will add the number to the sum by
//Converting the string to an integer
number=""; //This resets the number string so it can read the next number
place++; //This moves the loop along
}
return sum;
}
这应输出字符串中数字的总和,但它总是输出0.我将底部的if语句替换为每次数字加上1的数字#34;&#34;存储在其中。它总是输出字符串的长度,所以我知道while(Character.isDigit(place))循环永远不会正确运行。我不知道为什么,我可能只是错过了一些简单的东西。
答案 0 :(得分:0)
你的第二个while循环是错误的。 你检查了Character.isDigit(地方)但是这总是正确的,因为你正在检查一个数字! Place是您正在检查的字符串中的位置。 这应该是:
Character.isDigit(str.charAt(place))
这引入了第二个问题。由于你的最后一个字符是一个数字,while循环将检查下一个值,但由于它超出界限,因此没有任何值。 所以添加一张支票,你的时间将如下所示:
while (!(str.length() <= place) && Character.isDigit(str.charAt(place)))