CodingBat字符串练习的难度

时间:2017-12-11 23:41:00

标签: java string

我今年参加了在线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))循环永远不会正确运行。我不知道为什么,我可能只是错过了一些简单的东西。

1 个答案:

答案 0 :(得分:0)

你的第二个while循环是错误的。 你检查了Character.isDigit(地方)但是这总是正确的,因为你正在检查一个数字! Place是您正在检查的字符串中的位置。 这应该是:

Character.isDigit(str.charAt(place))

这引入了第二个问题。由于你的最后一个字符是一个数字,while循环将检查下一个值,但由于它超出界限,因此没有任何值。 所以添加一张支票,你的时间将如下所示:

while (!(str.length() <= place) && Character.isDigit(str.charAt(place)))