Wartość zmiennej nie jest inkrementowana – gdzie jest błąd?

0

Witam, napisałem aplikację w Visual Studio(Windows Form Application).
Błędem jaki się pojawia jest zerowanie zmiennej. Zmienna na początku ma przypisaną wartość zero, następnie zwiększam zmienną o 1, używam jej do sprawdzenia warunku i kontynuuje dalszą część kodu. Co ciekawe nigdzie indziej nie modyfikuje tej zmiennej, a pomimo to gdy z powrotem w dalszej części kodu chcę sprawdzić warunek z jej użyciem zmienna ma wartość zero zamiast jeden (a powinna być jeden ponieważ wcześniej była zwiększana). Prosiłbym o pomoc w znalezieniu błędu.
Zmienna ma nazwę "currentLevel".

0

Zlituj się... jedna klasa na >1400 linijek!? I to jeszcze partial, praktycznie z samymi polami statycznymi... Ja bym Ci tego nie zaliczył.
Waląc taki duży plik, powinieneś chociaż podać "traceback" z numerami linijek.

Zmienna to nie zmienna, tylko property.
currentLevel zerujesz w metodzie lvl1_Click. Może po zwiększeniu wartości klikasz lv1?

0

Właśnie nie więc czemu zmienia wartość

2

Użyj debuggera na tym property, to poznasz cały "lifecycle".

0

Nigdzie nie zwiększasz zmiennej o 1. Czasami wykonujesz

currentLevel + 1

Ale to jest zwykłe dodwanie 0 + 1 którego wynik używasz.
Nie chce mi się analizować całego przykładu, ale gdybyś zamienił np.

string lvl = Convert.ToString(currentLevel + 1); 

na

string lvl = Convert.ToString(++currentLevel); 

to zmienna po tej linii byłaby większa.

0

Jedyna iteracja jest w tym warunku

if (blocks.Count == 0)
            {
                // Wszystkie bloczki zniszczone => Gra wygrana
                currentLevel++;
                NextLevel();
            }

Widocznie nie jest spełniany.

0

Do debugowania używaj debugera, a nie forum. Postaw breakpoint tam, gdzie masz zerowanie zmiennej, kolejny postaw tam, gdzie tę zmienną zwiększasz, uruchom swoją aplikację w trybie debugowania i sam zobacz, co się dzieje.
W serwisie 4p masz artykuł opisujący korzystanie z debugera pod vs.

0

Tak wiem jak używać debugera, ale gdyby nie to że kiedy debuguje program wszystko działa zmienna zwiększa się normalnie jak powinno i nie ma błędów. O tyle bez debugera dziwnym trafem coś nie działa. I dlatego piszę na forum

0

...a pomimo to gdy z powrotem w dalszej części kodu chcę sprawdzić warunek z jej użyciem zmienna ma wartość zero zamiast jeden (a powinna być jeden ponieważ wcześniej była zwiększana)...

W której części kodu sprawdzasz ten warunek, o który warunek chodzi?

0

No to wstaw MessageBox.Show w tych miejscach, albo użyj klasy Debug do wypisywania. Jak się podłączysz debuggerem to możesz sobie to podglądać w visualu.

Połowa czasu w programowaniu schodzi na szukanie i naprawianie błędów więc tej umiejętności też musisz się nauczyć.

1
AvengerArrow napisał(a):

kiedy debuguje program wszystko działa zmienna zwiększa się normalnie jak powinno i nie ma błędów. O tyle bez debugera dziwnym trafem coś nie działa. I dlatego piszę na forum

Nie ma takiej opcji, o ile nie używasz kompilacji warunkowej. Zrób "clean solution" lub wyczyść zawartość katalogów bin w projektach w Twojej solucji, a potem "rebuild", bo może zostały jakieś śmieci. Możesz też podpiąć się debugerem do już uruchomionego procesu (Debug->Attach to process)

2

Ja bym jednak sugerował wywalić to wszystko i napisać porządnie, zacząć od braku static przy każdym polu niestatycznej klasy, bo to jest świetna metoda na odstrzelenie sobie stopy razem z jajami.
Może wtedy nawet debugger nie będzie potrzebny.

1

bo to jest świetna metoda na odstrzelenie sobie stopy razem z jajami.

...a nawet strasznie trudnych do wykrycia wycieków pamięci, spowodowanych źle przemyślaną architekturą. ;)

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