• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

problem z pętlą i warunkami

Object Storage Arubacloud
+1 głos
318 wizyt
pytanie zadane 13 stycznia 2021 w C# przez kubaa322 Użytkownik (710 p.)

Mam taki problem, że mam pętlę do while która wygląda mniej więcej tak:

do{
int i = 0;
//tu sie robi jakis kod
i++
}while(true)

i teraz chciałbym wywołać sobie pewną funkcję dla co 5 i czyli np dla 5, 10, 15, 20 itd. Jedyny sposób jaki wymyśliłem do zagnieżdżenie kilku warunków w sobie typu: 

if(i > 5){
funkcja()
        if(i >10){
             funkcja
          }
}

ale nie jest to optymalne, plus chciałbym żeby ta funkcja się wywoływała w nieskończoność np nawet dla i = 1200

Jakieś pomysły? Z góry dzięki!

3 odpowiedzi

+1 głos
odpowiedź 13 stycznia 2021 przez Whiskey_Taster Pasjonat (15,610 p.)

Skoro co 5, to liczba ta musi być zawsze podzielna przez 5, wobec tego wystarczy

if( i % 5 == 0)
{
funkcja();
}

Tylko uważaj na 0, ale to już sam ogarniesz. 

0 głosów
odpowiedź 13 stycznia 2021 przez Paweł Gargula Nowicjusz (240 p.)
Cześć, myśle, że możesz użyć np. reszty z dzielenia. Przykład: if(i%5 == 0)
komentarz 13 stycznia 2021 przez Whiskey_Taster Pasjonat (15,610 p.)
Samo to nie wystarcza, gdyż 0 mod 5 = 0. Jeszcze trzeba coś dodać, ale to już sobie autor wątku sam raczej wymyśli, nie jest to coś trudnego
komentarz 13 stycznia 2021 przez Paweł Gargula Nowicjusz (240 p.)
Masz racje. Ciekawe, że napisaliśmy praktycznie ten sam komentarz w tym samym momencie.

Pozdrawiam
komentarz 13 stycznia 2021 przez kubaa322 Użytkownik (710 p.)
Próbowałem już używać i % 5 == 0 ale dawało to taki efekt, że gdy w owej funkcji którą chcę wywołać inkrementuję pewną zmienną to była ona inkrementowana tylko dla 5, 10, 15 itd. Krótko mówiąc dla 6,7,8,9,11 funkcja nie wykonuje się
komentarz 13 stycznia 2021 przez Whiskey_Taster Pasjonat (15,610 p.)
Nie rozumiem. Pokaż cały kod, bo takie zgadywanie w ciemno nie jest interesujące. Oczywiście, że funkcja się nie wykonuje dla liczb, których reszta z dzielenia przez 5 jest różna od 0, gdyż wywołujemy ją tylko wtedy, gdy i mod 5 = 0. Chcesz mieć ciastko i zjeść ciastko?
komentarz 13 stycznia 2021 przez kubaa322 Użytkownik (710 p.)
IEnumerator SpawnObstacles()
    {
        int i = 0;
        do
        {
            var randomTime = Random.Range(minTime, maxTime);
            var randomObstacle = Random.Range(0, obstacles.Length);
            yield return new WaitForSeconds(randomTime);
            var obstacle = Instantiate(obstacles[randomObstacle], transform.position, Quaternion.identity);
            Destroy(obstacle, 10f);
            i++;
            if(i >= 10)
            {
                IncreaseSpeed();
                if(i >= 20)
                {
                    IncreaseSpeed();
                    if(i >= 30)
                    {
                        IncreaseSpeed();
                    }
                }
            }
        }
        while (true);
    }
    private void IncreaseSpeed()
    {
            Obstacle obs = FindObjectOfType<Obstacle>();
            obs.speed += 5f;
    }

To jest to co mam do tej pory. Generalnie chodzi to jest gra, w której spawnują się przeszkody i każda przeszkoda ma powiedzmy speed = 5. I chcę uzyskać efekt taki, że 1, 2, 3, 4, 5 przeszkoda ma startowy speed = 5, ale 6, 7, 8, 9, 10 ma już speed zwiększony o 5 itd.

komentarz 13 stycznia 2021 przez Whiskey_Taster Pasjonat (15,610 p.)

No dobra, ale kiedy ma się przeszkoda pojawiać? Gdy i jest podzielne przez 5? Ponadto część

"I chcę uzyskać efekt taki, że 1, 2, 3, 4, 5 przeszkoda ma startowy speed = 5, ale 6, 7, 8, 9, 10 ma już speed zwiększony o 5 itd." 

Czyli rozumiem, że przeszkody od 1 do 5 mają speed równy 5, przeszkody od 6 do 10 mają speed równy 10 i tak dalej? 

komentarz 14 stycznia 2021 przez VBService Ekspert (253,340 p.)

I chcę uzyskać efekt taki, że 1, 2, 3, 4, 5 przeszkoda ma startowy speed = 5, ale 6, 7, 8, 9, 10 ma już speed zwiększony o 5 itd.

Ale w kodzie masz zwiększanie co 10

komentarz 14 stycznia 2021 przez Whiskey_Taster Pasjonat (15,610 p.)
On tak chce w nieskończoność, gdy liczba obiektów osiąga pułap co 5 (a przynajmniej tak mi się wydaje, więc tu zmienna globalna zliczajaca wywołania funkcji by się przydała)
0 głosów
odpowiedź 14 stycznia 2021 przez VBService Ekspert (253,340 p.)
edycja 14 stycznia 2021 przez VBService
using System;

namespace ConsoleApplication1
{
    class Program
    {
        static int speed = 5;
        static void Main(string[] args)
        {

            int i = 0;
            Console.WriteLine("  i = {0,3}   speed = {1,3}   przedzial: 1, 2, 3, 4, 5", i, speed);
            do
            {
                i++;
                if (i % 5 == 0 && i > 0)
                {
                    Console.WriteLine("  i = {0,3}   speed = {1,3}   przedzial: {2}", i, IncreaseSpeed(), Range());
                }
                
            }
            while (i <= 100); // tu normalnie true
            Console.ReadKey();
        }

        private static int IncreaseSpeed()
        {
            return speed += 5;
        }


        private static string Range()
        {
            string range = "";
            for (int x = (speed - 5) + 1; x < speed + 1; ++x) { range += x.ToString() + ", "; }

            return range.TrimEnd(' ').TrimEnd(',');
        }
    }
}

Podobne pytania

0 głosów
2 odpowiedzi 562 wizyt
pytanie zadane 3 czerwca 2018 w C i C++ przez MAJ0R Obywatel (1,130 p.)
0 głosów
2 odpowiedzi 258 wizyt
pytanie zadane 4 listopada 2016 w C i C++ przez vega Użytkownik (510 p.)
0 głosów
3 odpowiedzi 967 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...