Хорошо, несколько вещей:
Ваш UserClass
является array
.Он будет содержать элементы, но если вы не добавите его, вы не сможете записать в него пользовательский ввод. Здесь является ссылкой для Arrays
в C # из MSDN.
Вы используете .Contains()
на string array
вместо string
.Хотя логически, да, string array
содержит эти значения.Хотя, если он действительно запускается / компилируется, все if statements
будут запускаться true вместо выбора из пользовательского ввода.
Что приводит меня к моей следующей вещи - вы просите user input
но на самом деле никогда не допускайте этого в показанном Main()
методе.Наиболее распространенный способ (который я видел) - это что-то вроде:
string input = Console.ReadLine();
, который, я вижу, вы пытаетесь реализовать, так что это не проблема:)
Этот код должен работать (и я сломаю свои изменения):
static void Main(string[] args)
{
string userName = "James";
string[] userClass = new string[3] { "mage", "warrior", "assassin" };
Console.WriteLine("What class will you be? You can choose from Mage, Warrior or Assassin:");
string input = Console.ReadLine();
if (input.ToLower() == userClass[0])
{
string Message = "You are a strong Willed Mage " + userName;
Console.WriteLine(Message);
}
else if (input.ToLower() == userClass[1])
{
string Message = "Your are a valiant Warrior " + userName;
Console.WriteLine(Message);
}
else if (input.ToLower() == userClass[2])
{
string Message = "You are a vigilant Assassin " + userName;
Console.WriteLine(Message);
}
else
Console.WriteLine("No proper class selected...");
Console.ReadLine();
}
string userName
остается таким же, как и ваш string[] userClass
(я изменил заглавную букву на верблюжий),Нет проблем (как я вижу) в том, чтобы эти userClass
хранились в array
, при условии, что вы правильно проверяете array
.
Вместо того, чтобы проверять, содержит ли массив string[] userClass
эти элементы, потому что мы знаем, что он делает так, как мы его написали, и как было сказано ранее, он всегда будет запускать true .Вместо этого мы проверяем, совпадает ли user input
с чем-либо в массиве.
Я создал string input = Console.ReadLine()
, чтобы разрешить ввод данных пользователем, а затем проверяю input
на значения string[] userClass
.Я добавил .ToLower()
и изменил значения массива на все строчные.Таким образом, если пользователь вводит mAgE
вместо Mage
, не будет выдано сообщение об ошибке.
Другой способ сделать это, если вы хотите избежать использования array
, должен использовать переключатель :
switch (input.ToLower())
{
case "mage":
Console.WriteLine($"You are a strong Willed Mage {userName}");
//assign user class
break;
case "warrior":
Console.WriteLine($"Your are a valiant Warrior {userName}");
//assign user class
break;
case "assassin":
Console.WriteLine($"You are a vigilant Assasin {userName}");
//assign user class
break;
}