• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 115
  • Last Modified:

How to replace if - else statements with switch statements ?

The following code calculates income tax.  Can it be replaced with "switch" and "case" statements ?

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

namespace MyFirstProject.day1.examples
{
    class tax
    {
        static void Main()
        {
            Console.WriteLine("Please enter salary");
            string input = Console.ReadLine();

            double salary = Convert.ToDouble(input);
            double tax;

            if (salary <= 8350)
            {
                tax = 8350 * .10;
            }
            else if (salary <= 33950)
            {
                tax = (8350 * .10) + ((salary - 8350) * .15);
            }
            else
            {
                tax = (8350 * .10) + ((33950 - 8350) * .15) + ((salary - 33950) * .25);
            }

            Console.WriteLine("Tax = " + tax);
        }


    }
}

Open in new window

0
naseeam
Asked:
naseeam
1 Solution
 
frankhelkCommented:
Not really. switch/case acts on fixed values, unsually integers, strings and enumertions (which are usually represented internally as integers.

The switch/case construct would therefore need the input variable to be converted ... i.e. with the if/then/elseif statement. That would be overcomplicated in your case ... but it would make sense if there are many segments in the code reacting on the same decision ... in that case it would make sense to compare once, stor the decision in an int (or an enumertion) and switch/case at multiple points in the code.
0
 
it_saigeDeveloperCommented:
To illustrate what frank is saying; consider the following:
using System;

namespace EE_Q28617929
{
	class Program
	{
		static void Main(string[] args)
		{
			Console.WriteLine("Please enter salary");
			string input = Console.ReadLine();
			double salary = Convert.ToDouble(input);
			double tax;
			switch ((int)salary)
			{
				case 0:
				case 1:
				case 2:
				case 3:
				case 4:
				case 5:
				case 6:
				case 7:
				case 8:
				case 9:
				// So forth and so on till you reached 8350
				case 8350:
					tax = 8350 * .10;
					break;
				case 8351:
				case 8352:
				case 8353:
				case 8354:
				case 8355:
				case 8356:
				case 8357:
				case 8358:
				case 8359:
				case 8360:
				// So forth and so on till you reached 33950
				case 33950:
					tax = (8350 * .10) + ((salary - 8350) * .15);
					break;
				default:
					tax = (8350 * .10) + ((33950 - 8350) * .15) + ((salary - 33950) * .25);
					break;
			}
			Console.WriteLine("Tax = " + tax);
		}
	}
}

Open in new window


It is just far *too* inefficient to do this with a switch...case statement.

-saige-
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now