-2

how do I reduce the number of if statements in this code

for (int i = 1; i < number;i++)
{

    if ( i % 3 == 0 && i % 5 != 0)
    {
        Console.WriteLine(i + " Fizz");
    }
    else if (i % 5 == 0 && i % 3 != 0)
    {
        Console.WriteLine(i + " Buzz");
    }
    else if(i % 3 == 0 && i % 5 == 0)
    {
        Console.WriteLine(i + " FizzBuzz");
    }

    else
    {
        Console.WriteLine(i);
    }
}
Marc Gravell
  • 1,026,079
  • 266
  • 2,566
  • 2,900
Josh
  • 3
  • 3

7 Answers7

2

You could do the following:

for (int i = 1; i < number;i++)
{
    Console.WriteLine(string.Format("{0} {1}{2}", i, i % 3 == 0 ? "Fizz":"", i % 5 == 0 ? "Buzz":"");
}

And use no if ;-)

Romano Zumbé
  • 7,893
  • 4
  • 33
  • 55
2
for (int i = 1; i < number;i++)
{
    string result = i + " ";
    if ( i % 3 == 0)
    {
        result += "Fizz";
    }
    if (i % 5 == 0)
    {
        result += "Buzz";
    }
    Console.WriteLine(result);
}

This would display for example 1_, 3 Fizz, 5 Buzz, 15 FizzBuzz.

See the javascript equivalent code snippet below :

var number = 20;
for (var i = 1; i < number;i++)
{
    var result = i + " ";
    if (i % 3 == 0)
    {
        result += "Fizz";
    }
    if (i % 5 == 0)
    {
        result += "Buzz";
    }
    document.write(result+"<br>");
}
Rafalon
  • 4,450
  • 2
  • 16
  • 30
1

Variables and the conditional operator can help to make code more readable:

for (int i = 1; i < number;i++)
{
    bool isMod3 = i % 3 == 0;
    bool isMod5 = i % 5 == 0;
    string fizz = isMod3 ? "Fizz" : "";
    string buzz = isMod5 ? "Buzz" : "";
    string result = $"{i} {fizz}{buzz}";
    Console.WriteLine(result);
}

Here's another approach that works with even more values(theoretically umlimited):

var modDict = new Dictionary<int, string> { { 3, "Fizz" }, { 5, "Buzz" } };
for (int i = 1; i < number; i++)
{
    string text = string.Join("", modDict.Select(kv => i % kv.Key == 0 ? kv.Value : ""));
    Console.WriteLine(i + " " + text);
}
Tim Schmelter
  • 450,073
  • 74
  • 686
  • 939
0

you can try conditional operators.

(i % 3 == 0)
? (i % 5 == 0)
  ? Console.WriteLine(i + " FizzBuzz")
  : Console.WriteLine(i + " Fizz");
: (i % 5 == 0)
  ? Console.WriteLine(i + " Buzz");
  : Console.WriteLine(i);
praty
  • 535
  • 2
  • 9
0
  string output = i % 3 == 0
                    ? ( i % 5 != 0 ? $"{i} Fizz" : $"{i} FizzBuzz" )
                    : i % 5 == 0 && i % 3 != 0
                        ? $"{i} Buzz"
                        : i.ToString();
  Console.WriteLine( output );
Peter
  • 76
  • 7
0

Try:

string str;
for (int i = 1; i < number; i++)
{
    str = i + " ";
    if (i % 3 == 0)
        str += "Fizz";
    if (i % 5 == 0)
        str += "Buzz";

    Console.WriteLine(str.Trim());
}
Pablo notPicasso
  • 3,031
  • 3
  • 17
  • 22
0

We can do like below, but it is not good for readability

for (int i = 1; i < number; i++)
        {
            var x = i % 3 == 0;
            var y = i % 5 == 0;

            string istr = i.ToString();
            string a = x ? (y ? istr + " FizzBuzz"
                                : istr + " Fizz")
                          : (y ? istr + " Buzz"
                                : istr);
            Console.WriteLine(a);
        }
JSR
  • 188
  • 8