Home > Back-end >  Why does my loop stop when a condition is met
Why does my loop stop when a condition is met

Time:10-28

I have to write a loop that returns "Fizz" if a number is a multiple of 3 and "Buzz" if it's a multiple of 5 between a certain set of number (here numbers between 15 to 22). When I execute the code, it only does the loop once and only returns "Fizz" whereas 15 is a multiple of both 3 and 5. How can I fix the issue? It needs to print out the numbers that are either a multiple of 3, of 5 or both and say if it's fizz, buzz or both Thanks,

class Program
{

  static void Main(string[] args)
  {
    Console.WriteLine(FizzBuzz(15, 22)); 
  }

  static string FizzBuzz(int première, int dernière)
  {
    string message = "";

    if (première < dernière)
    {

      while (première <= dernière)
      {

        if ( EstDivisiblePar3(première) )
        {
          message = "Fizz";
          return message;
        }

        if (EstDivisiblePar5(première))
        {
          message = "Buzz";
          return message;
        }

        première = première   1;

      }
                
    }
    else
    {
      message = "« Incohérence des paramètres de FizzBuzz ».";
    }

    return message;
  }

  static bool EstDivisiblePar3(int première)
  {
    return (première % 3) == 0;
  }

  static bool EstDivisiblePar5(int première)
  {
    return (première % 5) == 0;
  }

}

CodePudding user response:

Break it down into parts!

First write a method that determines what string to show for a number.

static string GetString(int n)
{        
    if (EstDivisiblePar3(n) && !EstDivisiblePar5(n))
    {
        return "Fizz";
    }
    if (!EstDivisiblePar3(n) && EstDivisiblePar5(n))
    {
        return "Buzz";
    }
    if (EstDivisiblePar5(n) && EstDivisiblePar3(n))
    {
        return "Fizz Buzz";
    }
    return n.ToString();
}

Now your main program is very simple:

static void FizzBuzz(int première, int dernière)
{
    for ( n = première; n <= dernière; n   )
    {
        var message = GetMessage(n);
        Console.WriteLine(message);
    }
}

CodePudding user response:

A simple approach would be to build a list and return it:

static List<string> FizzBuzz(int première, int dernière)
{
    List<string> messages = new List<string>();

    if (première < dernière)
    {
        while (première <= dernière)
        {
            bool estDivisiblePar3 = EstDivisiblePar3(première);
            bool estDivisiblePar5 = EstDivisiblePar5(première);
            if (estDivisiblePar3 && estDivisiblePar5)
            {
                messages.Add("FizzBuzz");
            }
            else if (estDivisiblePar3)
            {
                messages.Add("Fizz");
            }
            else if (estDivisiblePar5)
            {
                messages.Add("Buzz");
            }

            première = première   1;
        }
    }
    else
    {
        messages.Add("« Incohérence des paramètres de FizzBuzz ».");
    }
    return messages;
}

And then you can loop through like so:

foreach (string message in FizzBuzz(15, 22))
{
    Console.WriteLine(message);
}

I'd also suggest replacing your while loop with a for loop:

for (int i = première; i <= dernière;   i)
{
    bool estDivisiblePar3 = EstDivisiblePar3(i);
    bool estDivisiblePar5 = EstDivisiblePar5(i);
    if (estDivisiblePar3 && estDivisiblePar5)
    {
        messages.Add("FizzBuzz");
    }
    else if (estDivisiblePar3)
    {
        messages.Add("Fizz");
    }
    else if (estDivisiblePar5)
    {
        messages.Add("Buzz");
    }
}

Try it online

CodePudding user response:

        static string FizzBuzz(int première, int dernière)
    {
        string message = "";
        string message2 = "";
        string message3 = "";
        string rien = "";

        if (première < dernière)
        {

            while (première <= dernière)
            {
                

                if (EstDivisiblePar3(première) && !EstDivisiblePar5(première))
                {
                    
                    message = "Fizz";
                    Console.WriteLine($"{première} --- {message}");
                }

                if (EstDivisiblePar5(première) && !EstDivisiblePar3(première))
                {
                    message2 = "Buzz";                    
                    Console.WriteLine($"{première} --- {message2}");
                }
                if(EstDivisiblePar3(première) && EstDivisiblePar5(première))
                {
                    message3 = "FizzBuzz";
                    Console.WriteLine($"{première} --- {message3}");
                }

                première = première   1;

            }
            
        }
        else
        {
            message = "« Incohérence des paramètres de FizzBuzz ».";
        }
        return rien;
    }

    static bool EstDivisiblePar3(int première)
    {
        return (première % 3) == 0;
    }

    static bool EstDivisiblePar5(int première)
    {
        return (première % 5) == 0;
    }

CodePudding user response:

Please fix your code like this :

    static string FizzBuzz(int première, int dernière)
    {
        string message = "";
        if (première < dernière)
        {
            while (première <= dernière)
            {
                if (EstDivisiblePar3(première))
                {
                    message  = "Fizz";
                }

                if (EstDivisiblePar5(première))
                {
                    message  = "Buzz";
                }

                première = première   1;
            }
        }
        else
        {
            message = "« Incohérence des paramètres de FizzBuzz ».";
        }
        return message;
    }
  • Related