Какой поток управления реализовать, когда я хочу, чтобы пользователь не называл своих персонажей, выбранных с тем же именем? - PullRequest
0 голосов
/ 24 октября 2018

Я довольно новичок в программировании, поэтому простые задачи выглядят как гора Эверест.Я создал оператор Switch, чтобы игрок мог выбрать 3 из 4 персонажей для игры.Я хотел бы, чтобы он / она назвал их персонажей уникально.Я попытался, добавив «параметр [String]» к методу и внутри него, добавив имя каждого символа, используя «для цикла», чтобы проверить, был ли символ уже назван таким образом.Дело в том, что я продолжаю зацикливаться и не могу разобраться, как назвать каждого персонажа уникально.Если у кого-то есть подсказка, спасибо за ответ.

func makeTheTeam(listOfName: [String]) {

    var listOfName = listOfName

    // Presents all the fighter available
    gameAction.charactersPresentation()

    while listOfFighters.count < 3 {

        print("\nInput a number associated to select a fighter:")
        if let userChoice = readLine() {

            print("Name your fighter:")
            if let nameChoice = readLine() {

            switch userChoice {
            case "1":
                listOfFighters.append(Warrior(fighterName: "\(nameChoice)"))
            case "2":
                listOfFighters.append(Wizard(fighterName: "\(nameChoice)"))
            case "3":
                listOfFighters.append(Colossus(fighterName: "\(nameChoice)"))
            case "4":
                listOfFighters.append(Dwarf(fighterName: "\(nameChoice)"))
            default:
                print("You have not chosen three characters to enter the ring!! \n\nEnter a number associated to a fighter...")
            }
         }
      }
   }
}

1 Ответ

0 голосов
/ 24 октября 2018

Чтобы избавиться от проблемы «уникальных» имен, вы можете:

1- Получить преимущество от использования Sets , преобразовав listOfName в установите и проверьте счетчик:

if Set(listOfName).count == listOfName.count {
    // unique names, we are good to go
} else {
    // similar names... 
}

ИЛИ

2- , если вы хотите последовательно проверять массив после добавления каждогоэлемент, вы можете использовать contains.В качестве примера базового использования для него:

var names = [String]()
var inputName = "Jack"

// will append "Jack"
if names.contains(inputName) {
    // name is already exist
} else {
    names.append(inputName)
}

inputName = "Smith"

// will append "Smith"
if names.contains(inputName) {
    // name is already exist
} else {
    names.append(inputName)
}

inputName = "Smith"

// will NOT append "Jack"
if names.contains(inputName) {
    // name is already exist
} else {
    names.append(inputName)
}

Совет:

Если функция makeTheTeam должна получить неопределенное количество строк, япредложил бы объявить его как variadic :

func makeTheTeam(listOfName: String...) { // ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...