-6

这是我的解决方案。我的代码:

boolean pickUpNBeepersCheckIfAll(int beeper) {
    int counter=0;
        while(beeper>counter) {
            pickUpItemWithRobot();
            counter++;
        } 
        return false;
}

这里应该有问题,但我找不到错误..

4

4 回答 4

1

您拥有的方法将始终返回 false,因为 counter 在检查时永远不会为 0。你说如果没有更多的物品要拾取,你希望该方法返回 false,但你从不检查那个条件。您还说有足够的蜂鸣器来确保 pickUpItemWithRobot() 永远不会失败。您必须在某处拥有蜂鸣器的总数(我现在假设 pickUpItemWithRobot() 返回剩余的蜂鸣器数量。您想要这样的东西:

boolean pickUpNBeepersCheckIfAll(int beeper) {
    int beepersLeft;
    for (i = 0; i < beeper; i++ {            
        beepresLeft = pickUpItemWithRobot();
    }
    return beepersLeft > 0;
} 

如果 pickUpItemWithRobot() 不能返回剩余的蜂鸣器数量,那么返回语句应该类似于:

return getNumberOfBeeprsLeft() > 0;
于 2013-09-26T08:45:31.597 回答
1

问题是采取的行动顺序错误

int counter=0; //set conter to 0
    while(beeper>counter) {
        pickUpItemWithRobot();
        counter++;  //increment counter e.g. it will be 1 in the first loop
        if(counter==0) return true;  //never true...

好的,这counter++是一个 post 运算符,但这意味着在计算表达式之后完成 -而不是在循环完成之后。所以下一个表达式将看到新值:例如 1 表示第一次迭代......

于 2013-09-26T08:28:55.227 回答
1
boolean pickUpNBeepersCheckIfAll(int beeper) {
int counter=0;
    while(beeper>counter) {
        pickUpItemWithRobot();
        counter++;

    } 
    return true;
}

这是你要找的东西吗??

于 2013-09-26T08:41:01.270 回答
0
boolean pickUpNBeepersCheckIfAll(int beeper) {
    for (i = 0; i = beeper; i++ {            
        try {
            pickUpItemWithRobot();
        } catch (ItemNotFoundException e) {
            return false;
        }
    } 
    return true;
}

在您的版本中,计数器永远不会为 0,因为您每次循环都会增加它。

显然,如果蜂鸣器用完,您的 pickUpItemWithRobot() 方法将需要抛出异常。

于 2013-09-26T08:33:52.320 回答