Получение ошибки «Нет неявного преобразования целого числа в строку» в моей программе - PullRequest
0 голосов
/ 19 мая 2019

Я создаю текстовый музыкальный проигрыватель Program.

Внутри функции read_genre (), которая отображает списки доступных жанров (которые я определил 9 различных жанров внутри массива переменных $ genre_names instance вне пределовread_genre ()), и это побуждает пользователя выбрать жанр для альбома, который читает номер жанра, введенный пользователем.И тогда read_genre вызывается из read_album и распечатывается в функции print_album.

Проблема в том, что я получаю сообщение об ошибке "нет неявного преобразования nill в строку (TypeError)", строка 134, которая помещает "Genre is ' + album.genre из функции print_album ().

$genre_names = ['Null','Pop', 'Classic', 'Jazz', 'Rock', 'KPop', 'Metal', 'Punk', 'Romance', 'Latin']

# Display the genre names in a
# numbered list and ask the user to select one
def read_genre()
    length = $genre_names.length
    index = 0
    print $genre_names
  while (index < length)
    select_genre = read_integer_in_range("Select Genre: ", 0,9)
        case select_genre
        when 1
        puts "#{index + 1} " + $genre_names[1]
        break
        when 2
        puts "#{index + 2 } " + $genre_names[2]
        break
        when 3
        puts "#{index + 3} " + $genre_names[3]
        break
        when 4
        puts "#{index + 4} " + $genre_names[4]
        break
        when 5
        puts "#{index + 5} " + $genre_names[5]
        break
        when 6
        puts "#{index + 6} " + $genre_names[6]
        break
        when 7
        puts "#{index + 7} " + $genre_names[7]
        break
        when 8
        puts "#{index + 8} " + $genre_names[8]
        break
        when 9
        puts "#{index + 9} " + $genre_names[9]
        break
         else
          puts 'Please Select again'
          break 
        end
        index
    end

end

def read_album
    # Complete the missing code
  album_title = read_string("Enter Title: ")
  album_artist = read_string("Enter Artist name: ")
  album_genre = read_genre()
  tracks = [tracks]
  album = Album.new(album_title, album_artist, album_genre, tracks)
  album
end


def print_tracks tracks
    # Complete the missing code
    index = 0
    while (index < tracks.length)
     print_track(tracks[index])
     index += 1
    end
end

1 Ответ

1 голос
/ 19 мая 2019

Вы определили music_file в main методе, но пытаетесь получить к нему доступ внутри другого метода, где он не определен, следовательно, ошибка.

Давайте проанализируем, что делает ваш код:

def search_for_track_name(tracks, search_string)
index = 0
count = music_file.gets() 
# Trying to access a variable that is outside of the method's scope
# music_file doesn't exist here.

while (index < count)
    if (tracks[index] == search_string)
        return found_index = -1
        # You are returning -1 if the condition is true, which means
        # returning -1 when the string is found even though you want
        # the exact opposite.
    end
    index += 1
end
 found_index
 # If the pointer gets here, it means that the if statement was never true
 # therefore found_index was never defined

end

Давайте рассмотрим эти проблемы:

def search_for_track_name(tracks, search_string)
index = 0
count = tracks.length
# will loop through the array's items

while (index < count)
    if (tracks[index] == search_string)
        return index
        # will return index if found
    end
    index += 1
end
  -1
  # if the loop finishes and nothing is found, will return -1
end

Или вы можете просто использовать метод index, который возвращает индекс первого совпадения элемента в массиве.

tracks.index(search_string)

https://ruby -doc.org / ядро-2.6.3 / Array.html # метод-я-индекс

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