Home > Software engineering >  Not allowed to use else, don't see how i need to do it with this problem
Not allowed to use else, don't see how i need to do it with this problem

Time:09-23

Entry level of c# (REALLY).

Today I got the problem to create a console app that allows someone to enter their surname, name and age. If they are under 18 they should be classified as "Youth", if they are 18 or above they are adults. The only catch is it should be done with very little knowledge and A BASIC understanding of if usage. AND using else is forbidden.

The code I came up with:


static void Main(string[] args)
{
    Console.WriteLine("Vul uw voornaam, familienaam en leeftijd in.");
    
    string voorNaam = Console.ReadLine();
    string familieNaam = Console.ReadLine();
    int leeftijd = int.Parse(Console.ReadLine());
    
    string groepJeugd = "Jeugd";
    string groepVolwassen = "Volwassen";
    
    if (leeftijd < 18)
    {
        Console.WriteLine($"{voorNaam} {familieNaam}: {groepJeugd}");
    }
    else if (leeftijd >= 18) 
    {
        Console.WriteLine($"{voorNaam} {familieNaam}: {groepVolwassen}");
    }
    Console.ReadLine();
}

Small note, I don't know if it's correct to use "else if" If its not allowed to use else, I've thought about using switch, but since the lesson was about if, else etc... I dont think its correct to use it here.

CodePudding user response:

Set a default value of adult and override if under 18.

    static void Main(string[] args)
    {
        Console.WriteLine("Vul uw voornaam, familienaam en leeftijd in.");

        string voorNaam = Console.ReadLine();
        string familieNaam = Console.ReadLine();
        int leeftijd = int.Parse(Console.ReadLine());

        string group = "Volwassen";

        if(leeftijd < 18) 
            group = "Jeugd";

        Console.WriteLine($"{voorNaam} {familieNaam}: {group}");
       
        Console.ReadLine();
    }

CodePudding user response:

Hope using return isn't forbidden

static void Main(string[] args)
        {
            Console.WriteLine("Vul uw voornaam, familienaam en leeftijd in.");

           string voorNaam = Console.ReadLine();
           string familieNaam = Console.ReadLine();
           int leeftijd = int.Parse(Console.ReadLine());

           string groepJeugd = "Jeugd";
           string groepVolwassen = "Volwassen";

            if (leeftijd < 18)
            {
                Console.WriteLine($"{voorNaam} {familieNaam}: {groepJeugd}");
                Console.ReadLine();
                return;
            }
            Console.WriteLine($"{voorNaam} {familieNaam}: {groepVolwassen}");

            Console.ReadLine();
        }

CodePudding user response:

If you use if instead of the else if, it'll work too. So there'll be 2 if conditions in your code.

if (leeftijd < 18)
{
    Console.WriteLine($"{voorNaam} {familieNaam}: {groepJeugd}");
}
if (leeftijd >= 18)
{
    Console.WriteLine($"{voorNaam} {familieNaam}: {groepVolwassen}");
}

Another way:

You can return once you get the first condition true.

In this case, you won't need another condition.

if (leeftijd < 18)
{
    Console.WriteLine($"{voorNaam} {familieNaam}: {groepJeugd}");
    return ;
}

Console.WriteLine($"{voorNaam} {familieNaam}: {groepVolwassen}");

CodePudding user response:

1st way

var output=string.Empty;

if (leeftijd < 18) output= $"{voorNaam} {familieNaam}: {groepJeugd}";
if (leeftijd >= 18) output= $"{voorNaam} {familieNaam}: {groepVolwassen}";

Console.WriteLine(output);

2nd way, doesn't use else, but not sure if it allowed

var output = leeftijd < 18 ? $"{voorNaam} {familieNaam}: {groepJeugd}":
        $"{voorNaam} {familieNaam}: {groepVolwassen}";

Console.WriteLine(output);

CodePudding user response:

hello i used this ?: operator to do this and got true or false

(leeftijd >= 18 ? groepVolwassen : groepJeugd)
    /* if "leeftijd" is >= 18 put "groepVolwassen" and else with : put "groepJeugd" */

and its finally

Console.WriteLine($"{voorNaam} {familieNaam}: {(leeftijd >= 18 ? groepVolwassen : groepJeugd)}");

i hope you it help you if u want dont use else

CodePudding user response:

I think this is a trick question, there is technically no other option with such simple code, the compiler makes this choice for you. However, you can obfuscate it in several ways.

  • if / else
  • if / else if <- ¯\_(ツ)_/¯
  • if return
  • ?: operator <- if / else anyway
  • switch
  • while loop return <- if you want to get really weird

Note : You could possibly use an exception to branch, by causing any number of weird situations like divide by 0 exceptions, however I have left that absurdity out


if / else

if (leeftijd < 18)
   Console.WriteLine($"{voorNaam} {familieNaam}: {groepJeugd}");
else 
   Console.WriteLine($"{voorNaam} {familieNaam}: {groepVolwassen}");
Console.ReadLine();

if return

if (leeftijd < 18)
{
   Console.WriteLine($"{voorNaam} {familieNaam}: {groepJeugd}");
   Console.ReadLine();
   return;
}
Console.WriteLine($"{voorNaam} {familieNaam}: {groepVolwassen}");

Console.ReadLine();

Conditional Operator

Console.WriteLine(
   leeftijd < 18 
      ? $"{voorNaam} {familieNaam}: {groepJeugd}" 
      : $"{voorNaam} {familieNaam}: {groepVolwassen}");
Console.ReadLine();

switch

switch (leeftijd)
{
   case < 18:
      Console.WriteLine($"{voorNaam} {familieNaam}: {groepJeugd}");
      break;
   case >= 18:
      Console.WriteLine($"{voorNaam} {familieNaam}: {groepVolwassen}");
      break;
}

Console.ReadLine();

while loop return

while (leeftijd < 18)
{
   Console.WriteLine($"{voorNaam} {familieNaam}: {groepJeugd}");
   Console.ReadLine();
   return;
}

Console.WriteLine($"{voorNaam} {familieNaam}: {groepVolwassen}");
Console.ReadLine();

However

In all cases (except for the exception), the compiler will convert such simple cases to something like the following anyway

if (num < 18)
{
   ...
   Console.WriteLine(..);
   Console.ReadLine();
}
else
{
   ...
   Console.WriteLine(..);
   Console.ReadLine();
}

The short story, is the compiler only has a bunch of comparative operators no matter how you branch, it does have a switching type instruction, though in such a simple case it compiles it to an if anyway :/

  • Beq - Branch on equal
  • Bne - Branch on not equal
  • Bge - Branch on greater than or equal
  • Bgt - Branch on greater than
  • Ble - Branch on less than or equal
  • Blt - Branch on less than
  •  Tags:  
  • c#
  • Related