これが私の解決策です。私のコード:
boolean pickUpNBeepersCheckIfAll(int beeper) {
int counter=0;
while(beeper>counter) {
pickUpItemWithRobot();
counter++;
}
return false;
}
ここに何か問題があるはずですが、間違いを見つけることができません..
これが私の解決策です。私のコード:
boolean pickUpNBeepersCheckIfAll(int beeper) {
int counter=0;
while(beeper>counter) {
pickUpItemWithRobot();
counter++;
}
return false;
}
ここに何か問題があるはずですが、間違いを見つけることができません..
問題は、実行されるアクションの順序が間違っていることです
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 です...
boolean pickUpNBeepersCheckIfAll(int beeper) {
int counter=0;
while(beeper>counter) {
pickUpItemWithRobot();
counter++;
}
return true;
}
これはあなたが探しているものですか??
カウンターがチェックされた場所で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;
boolean pickUpNBeepersCheckIfAll(int beeper) {
for (i = 0; i = beeper; i++ {
try {
pickUpItemWithRobot();
} catch (ItemNotFoundException e) {
return false;
}
}
return true;
}
ループごとにインクリメントするため、バージョンカウンターは決して0ではありません。
明らかに、pickUpItemWithRobot() メソッドは、ブザーがなくなった場合に例外をスローする必要があります。