Ненужные дополнительные строки ввода - PullRequest
0 голосов
/ 09 апреля 2020

Я создаю приложение, которое на основе ввода одного из игроков1 создает новое число в зависимости от сложности. Когда я ввожу номер, приложение запрашивает введенный номер + еще, чтобы отобразить, и я не хочу этого. Пример:

Если я введу 4, приложение запросит 4 других ввода.

https://i.stack.imgur.com/PD2zQ.png

Я не хочу этого Может ли кто-нибудь объяснить, почему и как это исправить?

Вот мой основной код.

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()}");
    }

А это мой класс сложности уровня.

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);
   }
}

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Я думаю, что ваша проблема в вашей цепочке if else. Когда вы вводите:

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

В POINT A вы вызываете LevelSelect(), который запрашивает ввод. Если это возвращает что-либо, кроме 1, то if терпит неудачу, что означает, что вы переходите к POINT B, которая вызывает LevelSelect() снова и, таким образом, запрашивает вас снова и так далее, каждый раз, когда вы вызываете LevelSelect().

Что вы, вероятно, хотите:

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()}");
}

Хотя на самом деле switch лучше в этих случаях:

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;
}
0 голосов
/ 09 апреля 2020

Вы звоните LevelSelect() на каждый , если оператор, так что это нормально, что он будет делать Console.ReadLine() каждый раз. Вы должны вызывать этот метод только один раз:

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();
}

И так далее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...