Prośba o wyjaśnienie metody checkAnswers

0

Witajcie,
czy mógłbym ktoś wyjaśnić mi w słowach co dzieje się w tej metodzie? Dziękuję.


```private boolean checkAnswers() {
        boolean correct = true;
        for (boolean radioAnswer : answer)
            correct = correct && radioAnswer;
        return correct;
0

Masz pętlę for each, którą sprawdzasz każdy element (radioAnswer) w liście (answer). Jeśli przynajmniej jeden element będzie nie prawdą czyli false to wtedy metoda zwróci Ci false. Jeśli będą wszystkie na true to zwróci true :D

0

Dzięki Krecie,
popraw mnie proszę jeśli się mylę.

Czyli mamy metodę checkAnswer, w której correct ustawiamy na true. Potem następuje sprawdzenie, każdego elementu *radioAnswer
*na liście answer. A dalej? Jak wyjaśnić tę linię correct = correct && radioAnswer;? Że jeśli correct i radioAnswer są równe correct??

I jeszcze dodatkowe pytanie - skąd wziąły się elementy *radioAnswer *na liście answer skoro nie mam w całym MainActivity takiej listy z tym elementami? Jest tylko to:


``` public static Boolean[] answer = new Boolean[NUMBER_OF_QUESTIONS];
0
Kubs napisał(a):

Witajcie,
czy mógłbym ktoś wyjaśnić mi w słowach co dzieje się w tej metodzie? Dziękuję.


```private boolean checkAnswers() {
        boolean correct = true;
        for (boolean radioAnswer : answer)
            correct = correct && radioAnswer;
        return correct;

Kod jest napisany dość głupio, tzn. correct = correct && radioAnswer jest mało czytelne, ponadto po pierwszej niepoprawnej odpowiedzi pętla dalej będzie zasuwać, co jest zbędne, ponieważ gdy correct raz zmieni się na false, nigdy nie wskrzesi się już jego wartość true : ) Zbędna jest także zmienna correct.

W praktyce wystarczyłoby:

for (boolean radioAnswer : answers) {
    if (!radioAnswer) { 
        return false;
    }
}
return true;

Nawiasem mówiąc, skoro iterujemy po answer, jest to zapewne jakaś kolekcja, a zatem powinna nazywać się answers (w liczbie mnogiej). Zmienna correct jest, jak już zauważyłem, zbędna i do usunięcia, natomiast niezależnie od tego też była kiepsko nazwana. Powinna się nazywać np. allCorrect, bo to jest to, co jej wartość miała tak naprawdę odzwierciedlać. radioAnswer też nie jest fortunną nazwą.

Dobre nazewnictwo to jeden z fundamentów łatwo czytającego się kodu, a kiepskie nazwy powodują trudności w rozumieniu kodu nawet gdy jest bardzo prosty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1