Условие никогда не возвращается - PullRequest
0 голосов
/ 25 октября 2018

У меня есть оператор if, который проверяет, завершены ли три слота.Если это так, таймер должен остановиться, но код по какой-то причине не работает.Я видел пост, похожий на этот Если-условие никогда не выполняется несмотря на правильное условие , однако их решение ничего не решило.

Вот мой код:

Стопфункция

 public void stop(ImageSwitcher slot){
    slotOneFinished = (slot.equals(slotOne));
    slotTwoFinished = (slot.equals(slotTwo));
    slotThreeFinished = (slot.equals(slotThree));
    if (slotOneFinished&&slotTwoFinished&&slotThreeFinished){
        //not running
        Toast.makeText(MainActivity.this, "Running",Toast.LENGTH_SHORT).show();
        checkWin(getFruits());
        timer.cancel();
        timer = null;
    }
}

Таймер

private Timer timer;
TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        runOnUiThread(new TimerTask() {
            @Override
            public void run() {
                if (!slotOneFinished){
                    animate(randomSwitchCount(), slotOne);
                }
                if (!slotTwoFinished) {
                    animate(randomSwitchCount(), slotTwo);
                }
                if (!slotThreeFinished) {
                    animate(randomSwitchCount(), slotThree);
                }
            }
        });
    }
};

Функция анимации

public void animate(final int maxCount, final ImageSwitcher slot) {
    i++;
    if (i<maxCount){
        Animation in = AnimationUtils.loadAnimation(this, R.anim.new_slot_item_in);
        Animation out = AnimationUtils.loadAnimation(this, R.anim.old_item_out);
        slot.setInAnimation(in);
        slot.setOutAnimation(out);
        int fruit = randomFruit();
        slot.setTag(fruit);
        slot.setImageResource(fruit);
    }else {
        stop(slot);
    }
}

Использование == didи ничего.

Спасибо за помощь,

PiNet

1 Ответ

0 голосов
/ 25 октября 2018

Это условие никогда не может быть истинным, если предположить, что equals() реализован каноническим способом, а slotOne, slotTwo и slotThree - это 3 различных объекта:

if (slotOneFinished&&slotTwoFinished&&slotThreeFinished)

Looksкак будто у вас ошибочное предположение о области видимости переменных.Вероятно, вы можете исправить это, используя следующее условие:

if( slot == slotOne )
    slotOneFinished = true;

... и т. Д.

Отладчик Android Studio - ваш друг.

...