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");
}
}
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;
}