2016-01-09 3 views
-1

Я пытаюсь очистить свой код, чтобы он работал под разделами. Там одна называется intro(), еще один называется second() и так далее ..Линия кода игнорируется

вопрос приходит, когда я переключатель из первой секции кода (intro()) в следующий один (second()), который должен сначала запустить код очистки, но на самом деле это не так!

code в основном пишет текст на list, который должен выглядеть как чат, так что intro() является первой частью текста, то он должен очистить чат и начать писать другой текст внутри second().

Это мой код, посмотрите:

int counter; 
boolean introDone = false; 



//Intro 
public void intro(){ 
     write(answers[counter], buttonText[counter]); 
} 

public void second(){ 
      write("So these are the rules:", R.string.go); 
} 

public void hello(View view){ 
    Toast toast = Toast.makeText(this, Integer.toString(counter), Toast.LENGTH_SHORT); 
    toast.show(); 
    if(counter <= 2){ 
    intro(); 
    }else if(counter == 3){ 
     clear(); 
    }else if (counter > 2 && counter < 5) { 
    second();} 

    counter++; 
} 

}

Это сделал трюк:

//Intro 
public void intro(){ 
     write(answers[counter], buttonText[counter]); 

} 

public void second(){ 
      write("So these are the rules:", R.string.go); 
} 

public void hello(View view) { 
    Toast toast = Toast.makeText(this, Integer.toString(counter), Toast.LENGTH_SHORT); 
    toast.show(); 
    if (counter <= 2) { 
     intro(); 
    } else if(counter == 3) { 
     introDone = true; 
    } 
    if (introDone) { 
     clear(); 
     introDone = false; 
    } 
    if (counter > 2 && counter < 5) { 
      second(); 
     } 

    counter++; 
} 

}

+0

Попробуйте, если (introDone == true). Если это не работает, значит, ti означает, что ваш IntroDone является ложным. – Kristo

+3

@ Kristo1990 Как изменение 'if (introDone)' to 'if (introDone == true)' улучшит что-нибудь? Оба кода будут работать одинаково, и ваше предложение только вводит возможность сделать ошибку опечатки, как 'if (introDone = true)', поэтому '== true' следует избегать. – Pshemo

+1

Это ничего не меняет @ Kristo1990 – FET

ответ

0

Я буду считать, что boolean introDone переменная никогда не верна. В вашем методе intro() вы завернули оператор if, чтобы проверить, равен ли счетчик 2 или меньше. Трудно сказать, без полного источника, но я бы предположил, что если вы изменили свой код на этот:

//Intro 
public void intro(){ 

    //if (counter <= 2) { 
     // write(answers[counter], buttonText[counter]); 
    //}else{ 
     introDone = true; 
    //} 

} 

public void second(){ 
    if(introDone) { 
     listViewMother.setAdapter(null); //THIS SHOULD CLEAN THE LIST, BUT INSTEAD WHEN I RUN THE CODE IT LOOKS LIKE IT JUST IGNORES IT 
     if (counter > 2 && counter < 5) { 
      write("So these are the rules:", R.string.go); 
     } 
    } 
} 

public void hello(View view){ 
    Toast toast = Toast.makeText(this, Integer.toString(counter), Toast.LENGTH_SHORT); 
    toast.show(); 
    intro(); 
    second(); 
    counter++; 
} 

все будет работать нормально.

Оттуда вы можете посмотреть на логику того, как вы увеличиваете счетную переменную и видите, была ли эта проблема.

В этом примере будут выполняться вызовы intro() и second() 10 раз.

public void hello(View view){ 
     Toast toast = Toast.makeText(this, Integer.toString(counter), Toast.LENGTH_SHORT); 
     toast.show(); 
     for (int counter = 0; counter < 10; counter++) { 
      intro(); 
      second(); 
     } 

} 
+0

Эй, Джеймс, я думаю, что вы правы, вы разъяснили мне концепцию if/else заявлений, так что спасибо. Кстати, я до сих пор не могу сказать, работает ли это так, как будто мне нужен какой-то текст раньше который должен быть очищен, но теперь я выясняю способ достижения он окончательный результат :) – FET

+0

Хорошо, пожалуйста, отметьте это как правильный ответ, если он сработает. –

+0

Вы должны использовать какое-либо выражение while или if для цикла, хотя вызовы для методов intro() и second(), и каждый цикл будет увеличивать вашу переменную счетчика. Это решит вашу проблему. –

0

Как переменная счетчик и переменная introDone инициализируется?

Я полагаю, что переменная счетчик имеет значение 0 в начале программы, а переменный introDone является ложным. Если это так, то код в второй раздел не выполнен. Пример:

public void hello(View view){ 
    // --> here, counter=0 and introDone=false 
    Toast toast = Toast.makeText(this, Integer.toString(counter), Toast.LENGTH_SHORT); 
    toast.show(); 
    intro(); // --> counter is still 0, so the variable introDone is still false 
    second(); // --> because introDone=false then the code is not executed 
    counter++; 
} 
+0

Попытайтесь увидеть обновленный вопрос, я добавил начальный материал, о, и, кстати, он работает при первом щелчке – FET

Смежные вопросы