Solved

How to replace if - else statements with switch statements ?

Posted on 2015-02-16
2
87 Views
Last Modified: 2015-02-16
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
Comment
Question by:naseeam
2 Comments
 
LVL 14

Accepted Solution

by:
frankhelk earned 500 total points
ID: 40612747
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
 
LVL 33

Expert Comment

by:it_saige
ID: 40612932
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: Ivo
C# And Nullable Types Since 2.0 C# has Nullable(T) Generic Structure. The idea behind is to allow value type objects to have null values just like reference types have. This concerns scenarios where not all data sources have values (like a databa…
In order to hide the "ugly" records selectors (triangles) in the rowheaders, here are some suggestions. Microsoft doesn't have a direct method/property to do it. You can only hide the rowheader column. First solution, the easy way The first sol…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now