How to create a switch..case with ranges of values?

-1

If a total of days is greater than 30 and less than 60, I do something. If it's bigger than 60 and smaller than 90 I do something else and so on. How do I case ? Is case the best option?

    
asked by anonymous 26.03.2014 / 13:53

4 answers

2

Use if and else if this way:

int dias = 60;

if (dias < 30)
{
    System.Console.WriteLine("até 29");
}
else if (dias < 60)
{
    System.Console.WriteLine("de 30 até 59");
}
else if (dias < 90)
{
    System.Console.WriteLine("de 60 até 89");
}
else if (dias < 120)
{
    System.Console.WriteLine("de 90 até 119");
}
else
{
    System.Console.WriteLine("acima de 120");
}
    
26.03.2014 / 14:49
2

There are several ways.

Switch

With switch this is what comes to my head:

int mes = (int)System.Math.Floor((decimal)dias / 30);

switch(mes){
    case 0:
        break;
    case 1:
        // faz uma coisa
        break;
    case 2:
        // faz outra
        break;
    case 3:
    case 4:
        // faz outra..
        break;
    default:
        break;
}

Of course, it would have to be seen first if the ranges are multiples of 30 and if they are opened or closed.

If

With If , the most obvious would be:

if (dias > 30){
    if (dias < 60){
        // faz uma coisa
    }
    else if (dias < 90){
        // faz uma outra coisa
    }
    [...]
}

or depending on whether it is a command:

var outputDeDias = EvalDias(dias);

private string EvalDias(int dias){
    if (dias < 30){
        return null;
    }
    if (dias < 60){
        return "uma coisa";
    }
    if (dias < 90){
        return "outra coisa";
    }
    [...]

    return null;
}   
    
26.03.2014 / 16:38
1

Come on. If it's "so on," we can write something like this.

  public void Tests(int diasInseridos)
    {
        int dias = diasInseridos;
        bool selected = false;//variavel que aciona um 'break' no momento em que entramos em alguma condição(if/else) válida
        int comparadorInicial = 30;//variavel comparadora de valor menor
        int comparadorFinal = 60;//variavel comparadora de valor maior

        while (selected == false)
        {
            if (dias == null || dias <= 0)
            {
                //Aqui retorna nenhum dia
                selected = true;//booleano para sair do laço
            }
            else if (dias > comparadorInicial && dias < comparadorFinal)
            {
                //Seu código retorna de acordo com os dias que seu programa detectou
                selected = true;//booleano para sair do laço
            }
            else
            {
                comparadorInicial = comparadorInicial + 30;
                comparadorFinal = comparadorFinal + 30;
            }

        }

    }
    
26.03.2014 / 15:02
0

You should use multiple if 's instead of switch . The switch is for comparing point values, not being able to compare ranges as you indicated in the question.

if (30 <= tempo && tempo < 60)
{
}
else if (60 <= tempo && tempo < 90)
{
}

Then you're nesting the if 's in else ' s successively as far as you need.

    
26.03.2014 / 14:28