-6

これが私の解決策です。私のコード:

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

ここに何か問題があるはずですが、間違いを見つけることができません..

4

4 に答える 4

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++は事後演算子です、これはループが完了した後ではなく、式が評価された後に実行されることを意味します。したがって、次の式には新しい値が表示されます。たとえば、最初の反復では 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 に答える
1

カウンターがチェックされた場所で0になることは決してないため、メソッドは常にfalseを返します。ピックアップするアイテムがこれ以上ない場合にメソッドが false を返すようにしたいが、その条件をチェックしていないとします。また、 pickUpItemWithRobot() が決して失敗しないようにするのに十分なブザーがあると言っています。ビープ音の総数をどこかに持っている必要があります (ここでは、pickUpItemWithRobot() が残っているビープ音の数を返すと仮定します。次のようなものが必要です。

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

pickUpItemWithRobot() が残りのビープ音の数を返すことができない場合、return ステートメントは次のようになります。

return getNumberOfBeeprsLeft() > 0;
于 2013-09-26T08:45:31.597 に答える
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 に答える