преобразовать массив строк в строку для условия if else - PullRequest
0 голосов
/ 04 декабря 2018

я пытаюсь учиться, (я новичок в кодировании)

я написал это

static void Main(string[] args)
{
    string username = "James";
    string[] Userclass = new string[3] { "Mage", "Warrior", "Assasin" };

    Console.WriteLine("What class will you be? You can choose from Mage, Warrior, Or Assasin: ");


    if (Userclass.Contains("Mage"))
    {
        String Message = "You are a strong Willed Mage " + username;
        Console.WriteLine(Message);
    }
     if (Userclass.Contains("Warrior"))
    {
        String Message = "Your are a valiant Warrior " + username;
        Console.WriteLine(Message);
    }
     if (Userclass.Contains("Assasin"))
    {
        String Message = "You are a vigilant Assasin " + username;
        Console.WriteLine(Message);

    }
    Console.ReadLine();
}

однако, если я определю:

string Userclass = Console.Readline(); 

я получуошибка в том, что

не может преобразовать строку [] в строку

спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Вот, пожалуйста, я написал комментарии, объясняющие каждую часть программы, дайте мне знать, если вы не можете что-то понять.

static void Main(string[] args)
{
    Console.Write("Enter Username: "); // we ask for the username here, you can do it with Console.WriteLine() as well
    string username  = Console.ReadLine();  // get the username
    Console.Write("What class will you be? You can choose from Mage, Warrior, Or Assasin: "); // ask for the class, also same as above, you can use Console.WriteLine()
    string userclass = Console.ReadLine();   // get the class

    // Possible character classes (we use this as a reference to check the class the user gives us later)
    // also set the string representing each class as lower case characters to avoid looping or unnecessary string concatenation later
    string[] charClasses = new string[3] { "mage", "warrior", "assasin" }; // make sure the class given is within our possible character classes

    // here we check that the class given is within the bound of our possible classes and convert
    // the userclass to its lower case equivalent to match it with those in the array
    if (Array.IndexOf(charClasses, userclass.ToLower()) != -1)   
    {
         // if the class is acceptable then attach it to the message along with the username via string concatenation
        String Message = "You are a strong Willed "+userclass + " " + username; 
        Console.WriteLine(Message);  // print the message
    }
}
0 голосов
/ 04 декабря 2018

Хорошо, несколько вещей:

Ваш 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...