Co się dzieje w tej metodzie..?

0

Witajcie,
czy mógłby ktoś wytłumaczyć linijka po linijce co się dzieje w tym kodzie?


public void calculatingScore(){
        int totalRightAnswer = 0, totalNoOfQuestion;
        totalNoOfQuestion =  qPojo.getQuetionList().size()-1;
        for (int i = 0; i<=totalNoOfQuestion;i++) {
            if (uaPojo.getUserAnswer().get(i) == raPojo.getRightAnswer().get(i)){
                totalRightAnswer = totalRightAnswer+1;
            }
        }
        Log.d(TAG,"final Score in percentage => "+totalRightAnswer*100/totalNoOfQuestion);

1
int totalRightAnswer = 0 // deklaruje i inicializuje zmienną z wartością 0 (raczej do liczenia punktów)
totalNoOfQuestion =  qPojo.getQuetionList().size()-1; 
// przypisuje do tej zmiennej ilość elementów  qPojo.getQuetionList() jako index ostatniego elementu
// np. jest 10 pytań, to do tej zmiennej pójdzie liczba 9, bo indexujemy od 0.

for (int i = 0; i<=totalNoOfQuestion;i++)
// pętla for lecąca od 0, do indexu ostatniego elementu z qPojo.getQuetionList() (włącznie)
{
	if (uaPojo.getUserAnswer().get(i) == raPojo.getRightAnswer().get(i))
	// jeśli odpowiedz usera na indexie i == odpowiedz z listy poprawnych odpowiedzi na indexie i,
	// to wchodzi dalej (czyli user dobrze odpowiedział)
	{
		totalRightAnswer = totalRightAnswer+1; // zwiększa licznik poprawnych odp.
	}
}
Log.d(TAG,"final Score in percentage => "+totalRightAnswer*100/totalNoOfQuestion); // wyświetla wynik jako %.

// Ilości poprawnych odp podzielonych przez ilość pytań -1 (raczej piszący kod popełnił tu błąd)
// nie jestem pewien czym jest ten "TAG"

W skrócie: sprawdza odpowiedzi użytkownika z poprawnymi odpowiedziami do testu i nalicza mu punkty i wyświetla %.

0
WeiXiao napisał(a):
int totalRightAnswer = 0 // deklaruje i inicializuje zmienną z wartością 0 (raczej do liczenia punktów)
totalNoOfQuestion =  qPojo.getQuetionList().size()-1; 
// przypisuje do tej zmiennej ilość elementów  qPojo.getQuetionList() jako index ostatniego elementu
// np. jest 10 pytań, to do tej zmiennej pójdzie liczba 9, bo indexujemy od 0.

A co dokładnie znaczy to -1?
Czy możesz wyjaśnić trochę więcej "jeśli jest 10 pytań, to do tej zmiennej pójdzie liczba 9, bo indexujemy od 0" ?

for (int i = 0; i<=totalNoOfQuestion;i++)
// pętla for lecąca od 0, do indexu ostatniego elementu z qPojo.getQuetionList() (włącznie)
{
if (uaPojo.getUserAnswer().get(i) == raPojo.getRightAnswer().get(i))
// jeśli odpowiedz usera na indexie i == odpowiedz z listy poprawnych odpowiedzi na indexie i,
// to wchodzi dalej (czyli user dobrze odpowiedział)

Co dokładnie znaczy index i?

Serdecznie dziękuje.

0

A co dokładnie znaczy to -1?

Załóżmy że masz tablicę 10 elementów. Pierwszy element tej tablicy znajduje się pod indeksem 0, drugi pod 1 itd. ostatni element to indeks 9 (nie 10).
Właśnie stąd bierze się to "magiczne" -1.

0

Czyli to -1 wskazuję dokładnie na co / o czym informuje? Wybacz, że wciąż błądzę :)

2

size() zwraca Ci ilość elementów w kolekcji, wracając do mojego przykładu wynikiem byłoby 10.
Ale 10 to nie maksymalny indeks, więc odejmujemy 1 od wyniku (-1) i otrzymujemy 9 które następnie możemy używać w pętli do pobrania i-tego elementu.

1

masz tablice new tab[10] ktora ma 10 elementow
tab.size() zwraca 10 bo taki jest rozmiar tej tablicy
elementy tablicy sa indeksowane od 0 czyli kolejno 0,1,2,3,4,5,6,7,8,9 (jest element 0, brak elemenut 10)
i musisz odjac -1 bo jak bedziesz chcial siegnac do elementu o indeksie 10 czyli tab[10] to wyjdziesz poza zakres tablicy
pierwszy element to tab[0] a dziesiaty element to tab[9]

0

Nie ma jak to przykłady. Ty zawsze jesteś w nich dobry :)

Czy będzie sytuacja kiedy nie będziemy musieli pisać tego -1 ?

1

Nie. Chyba że zmienisz warunek w pętli:

for (int i = 0; i < 3; i++) {
	System.out.println(i);
}

Wynikiem programu byłoby:

0
1
2

Ale gdyby zmienić go na (coś takiego jak masz teraz):

for (int i = 0; i <= 3; i++) {
	System.out.println(i);
}

Wynik:

0
1
2
3

Tak samo mógłbyś zmienić swój kod:

for (int i = 0; i < qPojo.getQuetionList().size(); i++)

Ta forma jest dużo częściej spotykana w porównaniu do tego co masz teraz.

1

jw. wygodniej jest napisac

for (int i = 0; i < qPojo.getQuetionList().size(); i++)

albo foreach o ile nie potrzebujesz indeksu, albo iterator. w kotlinie jeszcze mozna z indeksem ale to inna sprawa

przypadek bez odejmowania zalezy jak to napiszesz :)

0

Hmm.. to jak wyglądałby kod z mojego postu bez -1 ?

Ps. kurcze, ile w tym wszystkim jest zawiłości.

1
        int totalRightAnswer = 0;
        for (int i = 0; i < qPojo.getQuetionList().size(); i++) {
            if (uaPojo.getUserAnswer().get(i) == raPojo.getRightAnswer().get(i)){
                totalRightAnswer = totalRightAnswer+1;
            }
        }

tak by wygladal, kwestia znaku < oraz <= (dla znaku <= musisz odjac od size-1 bo wyjdziesz poza zakres, zgodnie z tym co pisalem)
podstawy programowania sie klaniaja :)

0

Fajnie, teraz zrobiło się to ciut klarowniejsze :) Dziękuje

A może chciałbyś być współtworzącym aplikację? Kod po części jest napisany. W kolejnych wersjach aplikacji będzie po prostu wymagał korekt i to wszystko .W razie chęci zapraszam. :)

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