C# - pętla while oraz inkrementacja

0

Dzień dobry.

Sprawa dotyczy poniższej pętli. Po skompilowaniu otrzymujemy komunikaty:

Wykonano pętle dla j=4
Wykonano pętle dla j=10

Siedzę sobie nad tym już od dłuższego czasu, rozpisuje za pomocą kartki i długopisu, ale po prostu nie wiem dlaczego wartości 4 i 10 stanowią to co sie wypisze na ekranie.
Zachodzi inkrementacja która mnie trochę wyprowadza z równowagi.

Skoro zmienną j inicjalizujemy dzięki "- 2" to jak rozumiem inkrementacja "++j" zmienia wartość na -1, warunek -1<10 jest spełniony więc przechodzimy do klamerek.
W klamerkach mamy kolejna inkrementacje przy której mam wątpliwości.
Jak rozumiem mamy do czynienia z wyrażeniem więc wartość j jest odczytywana przed inkrementacją więc interesuje nas reszta z dzielenia -1 przez 3 a nie 0 przez 3.
Natomiast owa inkrementacja występująca przy if uwidacznia się w momencie kolejnego obiegu pętli co - według moich refleksji, których już pewny nie jestem - daje nam w kolejnym obiegu "while (1 < 10)".

Mam nadzieje, że jasno przedstawiłem zagadnienie.
Bedę wdzięczny za kilka słów mogących naprowadzić na odpowiedni tok rozumowania.


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace ConsoleApplication9
{
class Program
{
static void Main(string[] args)
{

        int j = -2;

        while (++j < 10)
        {
            if (j++ % 3 != 0)
                continue;
            Console.WriteLine("Wykonano pętle dla j={0}", j);


        }

        Console.ReadLine();

      
    }
}

}

1
using System;
namespace ConsoleApplication9
{
    class Program
    {
        static void Main(string[] args)
        {
            int j = -2;
            while (j < 10)
            {
                j++;
                if (j % 3 != 0) // jeśli reszta z dzielenia j przez 3 różna od 0
                    continue; 
                Console.WriteLine("Wykonano pętle dla j={0}", j);
            }
            Console.ReadLine();
        }
    }
}
0

@Min0s

Dzięki za odpowiedź tyle tylko, że są tu subtelne różnice.

Po wykonaniu kodu który zamieściłem wypisane zostanie następujący komunikat:

Wykonano pętle dla j=4
Wykonano pętle dla j=10

Po wykonaniu Twojego kodu z tego co widzę wypisany zostaje komunikat:

Wykonano pętle dla j=0
Wykonano pętle dla j=3
Wykonano pętle dla j=6
Wykonano pętle dla j=9

@olesio

Dzięki za odpowiedni format i przepraszam za błąd.

2

Rozni sie poniewaz inkrementujesz dwukrotnie w petli while a @Min0s tylko raz

ogolnie wystrzegaj sie takich rzeczy

if (j++ % 3 != 0) 

duzo lepiej zainkrementowac zmienna przed ifem a pozniej w ifie sprawdzic. Tak jak to robi @Min0s

0

Dzięki za sugestię. :)

Owy przykład miał mi niejako w pewnym stopniu pokazać elementy dotyczące inkrementacji.
Głównym problemem jest jednak to, że nie za bardzo rozumiem dlaczego w przypadku uruchomienia mojej wersji kodu wartości wypisywane na ekranie to 4 oraz 10.

Starałem się to jakoś rozpisać, krok po kroku, ale nie doszedłem do żadnych wniosków. Stąd też temat na forum. Przykład który podał @Min0s faktycznie modyfikuje inkremenacje ale tym samym powoduje, że inne wartości są wypisywane. Mi natomiast zależy bardziej na pewnej refleksji dotyczącej tego dlaczego wypisane jest 4 i 10, albo na takiej modyfikacji mojego kodu, która będzie łatwiejsza w interpretacji, ale będzie wypisywała te same wartości. To chyba pozwoliłoby mi zrozumieć skąd wartości 4 i 10.

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