SumNumbers - 编码蝙蝠

时间:2015-08-02 23:16:57

标签: java

我正在工作this Codebat problem

我在前面的总数问题上看到了此处列出的解决方案。我已编码

if (str.length() == 0) {
    return 0;
}
int sum = 0;
int start = 0;
int stop = 0;
for (int i = 0; i < str.length(); i++) {
    if (Character.isDigit(str.charAt(i))) {
        start = i;
        for (int j = i + 1; j < str.length(); j++) {
            if (!Character.isDigit(str.charAt(j))) {
                stop = j;
                j = j + str.length();
            }
        }
        sum += Integer.parseInt(str.substring(start, stop));
    }
}
return sum;

我认为这是一种在字符串中查找数字开头和结尾的简单方法。当我在codingbat上运行时,我得到了"5hoco1a1e""5$$1;;1!!"的正确总和(7)。"Chocolate"也返回0,这是正常的。在测试时我将return更改为return start;我得到一个5作为字符串"abc123xyz"的结果(它应该是123)所有我正在做的(我认为)是设置当我找到字符串中的第一个数字时start来自i。关于我如何通过这段代码工作的任何想法?我真的不是在寻找答案,而是让某些人知道我误入歧途的地方。

2 个答案:

答案 0 :(得分:1)

第一个缺陷是i仅在内循环完成后移动到下一个字符。当i需要移动到内循环停止的位置(i = ji = stop)时。仅此一点并不能解决所有问题。

如果您的String以数字结尾(即"5hoco1a1e123"),则下一个缺陷是您的代码会抛出错误。一旦达到最后一个值,您的代码就会为start分配一个新值,但stop将无法获得新值。这会导致sum += Integer.parseInt(str.substring(start, stop));错误,因为stop小于start

答案 1 :(得分:0)

嵌套for循环完成后,i仍然与循环开始前相同。要解决此问题,请在结束嵌套循环之前设置i = j

if (!Character.isDigit(str.charAt(j))){
    stop = j;
    i = j;
    j = j+ str.length();
}