Условное утверждение не сработало - PullRequest
0 голосов
/ 08 марта 2019

Я написал фрагмент кода, который создает случайную строку на основе ввода. Пользователь решает его длину и должен ли он содержать цифры и специальные символы. Я добавил отказоустойчивую подпрограмму, потому что конечный результат является случайным:

def create
  i = @number
  while i != 0
    # testing the script I have noticed that the if statement is (always) ignored.
    if i == 2 && (@word_bank.include?(@special_chars) && @rand_ary.include?(@special_chars) == false)
      @rand_ary << @special_chars[rand(0..@special_chars.size - 1)]
    end
    letter = rand(0..word_bank.size - 1)
    #puts "#{i}, #{word_bank[letter]}"
    @rand_ary << word_bank[letter]
    word_bank.delete_at(letter)
    i -= 1
  end
  @rand_string = @rand_ary.join()
  puts @rand_string
  @rand_string
end

Если пользователь выбирает включение специального символа, счетчик работает от n - 0. Когда i = 2, и в массиве специальных символов нет символа, случайный специальный символ включается вручную.

Но это if -общение никогда не срабатывает. Я не могу понять, почему.

1 Ответ

3 голосов
/ 08 марта 2019

Если ваши переменные имеют тот тип значений, который, я думаю, они имеют, это потому, что include не является правильным методом для использования здесь.

Если @word_bank и @rand_ary являются массивами, include проверит, равен ли какой-либо отдельный элемент @special_chars. Если @special_chars сам является массивом, то он вернет true, только если один из элементов в @word_bank / @rand_ary является массивом.

['a', 'b', 'c', '!'].include?('!') # => true
['a', 'b', 'c', '!'].include?(['!']) # => false
['a', 'b', 'c', ['!']].include?(['!']) # => true

Я думаю, что вы на самом деле заинтересованы в том, есть ли совпадение между ними. В этом случае вы можете использовать оператор пересечения (&) и проверить, является ли он пустым.

['a', 'b', 'c', '!'] & ['!'] # => ['!']
['a', 'b', 'c'] & ['!'] # => []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...