Dash
Dash

Reputation: 3

Unnecessary extra input lines

I am making an app that based on the input of one of player1 it creates a new number based on difficulty. When I input the number, the app asks for number I entered+ more to display and I don't want that. Example:

If I input 4, the app will ask for 4 other inputs.

https://i.sstatic.net/PD2zQ.png

I don't want this to happen can anyone explain why and how to fix this?

Here is my main code.

Console.WriteLine($"Can {user[0]} select a level? If not choosen between either 30 seconds or between 1, 2, 3  it will be automatically choosen.");
Level_Select level = new Level_Select(LevelSelect());

static int LevelSelect()
   {
    int select;
    int.TryParse(Console.ReadLine(), out select);
    return select;
   }

if (LevelSelect() == 1)
   {
     Console.WriteLine($"{Level_Select.level1()}");
   }
   else if (LevelSelect() == 2)
   {
    Console.WriteLine($"{Level_Select.level2()}");
   }
    else if (LevelSelect() == 3)
    {
    Console.WriteLine($"{Level_Select.level3()}");
    }
    else if ((LevelSelect() != 1) || (LevelSelect() != 2) || (LevelSelect() != 3))
    {
    Console.WriteLine($"{Level_Select.Default()}");
    }

And this is my Level Difficulty Class.

class Level_Select
{
  private int level;

  public Level_Select(int level)
  {
  this.Level = level;
  }

   public int Level
   {
    get { return level; }
    set {
     if (value == 1)
      {
      this.level = value;
      }
      else if (value == 2)
      {
      this.level = value;
      }
      else if (value == 3)
      {
      this.level = value;
      }
     }
    }

    public static int Default()
    {
    int min = 000;
    int max = 999;
    Random num = new Random();
    return num.Next(min, max);
    }

    public static int level1()
    {
    int min = 000;
    int max = 99999;
    Random num = new Random();
    return num.Next(min, max);
    }

   public static int level2()
   {
   int min = 00000;
   int max = 99999999;
   Random num = new Random();
   return num.Next(min, max);
   }

   public static int level3()
   {
   int min = 000000000;
   long ten = 9999999999;
   int max = (int)ten;
   Random num = new Random();
   return num.Next(min, max);
   }
}

Upvotes: 0

Views: 55

Answers (2)

Anouar
Anouar

Reputation: 2470

You are calling LevelSelect() on each if statement so it's normal that it will make a Console.ReadLine() each time. You should call that method only once:

var selectedLevel = LevelSelect();

var level = new Level_Select(selectedLevel);

if (selectedLevel == 1)
{
    //do some stuff
    Level_Select.level1();
}
else if (selectedLevel == 2)
{
    // do some other stuff
    Level_Select.level2();
}

And so on.

Upvotes: 0

Jasper Kent
Jasper Kent

Reputation: 3676

I think your problem is in your if else chain. When you put:

if (LevelSelect() == 1)                             // POINT A
{
    Console.WriteLine($"{Level_Select.level1()}");
}
else if (LevelSelect() == 2)                        // POINT B
{
    Console.WriteLine($"{Level_Select.level2()}");
}

At POINT A, you call LevelSelect(), which prompts for input. If this returns anything but 1, the if fails, meaning you move on to POINT B, which calls LevelSelect() again and so prompts you again, and so on, every time you call LevelSelect().

What you probably want is:

int selectedLevel = LevelSelect(); // Called only once

Level_Select level = new Level_Select(selectedLevel);

if (selectedLevel  == 1)
{
    Console.WriteLine($"{Level_Select.level1()}");
}
else if (selectedLevel  == 2)
{
    Console.WriteLine($"{Level_Select.level2()}");
}
else if (selectedLevel  == 3)
{
    Console.WriteLine($"{Level_Select.level3()}");
}
else    // No need to retest; if it's here it's not 1, 2 or 3
{
    Console.WriteLine($"{Level_Select.Default()}");
}

Though in fact, a switch is better in these cases:

int selectedLevel = LevelSelect();   // Called only once

Level_Select level = new Level_Select(selectedLevel);

switch (selectedLevel)  
{
    case 1:
        Console.WriteLine($"{Level_Select.level1()}");
        break;
    case 2:
        Console.WriteLine($"{Level_Select.level2()}");
        break;
    case 3:
        Console.WriteLine($"{Level_Select.level2()}");
        break;
    default:
        Console.WriteLine($"{Level_Select.Default()}");
        break;
}

Upvotes: 1

Related Questions