2016-05-24 7 views
0

Unten ist Code zur Implementierung von Film-Playlist gegeben, aber das Problem ist hier, wenn m versucht, dieses Programm zu starten seine Ausgabe wie folgt. Bitte helfen Sie mir korrekte AusgabeRuby Code Problem

class Movie 
attr_accessor :movie_name, :rank 

def initialize(movie_name,rank) 
@movie_name = movie_name 
@rank = rank 
end 

def thumbs_up 
    @rank = @rank + 1 
    display 
end 

def thumds_down 
    @rank = @rank - 1 
    display 
end 
def display 
    puts "Name of Movie #{@movie_name} and Rank #{@rank}" 
    end 
end 

class Playlist 
    def initialize(name) 
     @name = name 
     @movies = [] 
    end 
    def add_movies movie 
     @movies << movie 
    end 
    def play 
     puts "#{@name}'s Playlist:" 
     puts @movies 

     @movies.each do |movie| 
      movie.movie_name 
      movie.thumbs_up 
      puts movie 
     end 

    end 
end 


movie1 = Movie.new("Devil",10) 
movie2 = Movie.new("Inception",3) 

playlist1 = Playlist.new("John") 
playlist1.add_movies(movie1) 
playlist1.add_movies(movie2) 
playlist1.play 

OutPut in immer:

John's Playlist: 
Name of Movie Devil and Rank 11 
Name of Movie Inception and Rank 4 

erwartete Ausgabe:

John's Playlist: 
Name of Movie Devil and Rank 10 
Name of Movie Inception and Rank 3 
Name of Movie Devil and Rank 11 
Name of Movie Inception and Rank 4 

Antwort

0

Ändern der Movie#display Methode:

def display 
    "Name of Movie #{@movie_name} and Rank #{@rank}" 
end 

Und Playlist # play zu:

def play 
    movies = @movies.collect do |movie| 
    movie.movie_name 
    movie.thumbs_up 
    end 
    puts "#{@name}'s Playlist:#{movies.join(' and ')}" 
end 
0

In Ihrem play Verfahren entfernen:

puts @movies 

und

puts movie 
0

In Ihrem jeder der Filme

@movies.each do |movie| 
    movie.movie_name 
    movie.thumbs_up 
    puts movie 
end 

ersetzen Sie es mit @movies.each { |movie| movie.display } dies wird Ihnen die Ausgabe von

playlist1.play 
#Name of Movie Devil and Rank 10 
#Name of Movie Inception and Rank 3 

Voll Code:

def play 
    puts "#{@name}'s Playlist:" 
    puts @movies 
    @movies.each do |movie| 
     movie.movie_name 
     movie.thumbs_up 
     puts movie 
    end 

end 

Hier setzt @movies Objektadresse druckt oben mit:

class Movie 
attr_accessor :movie_name, :rank 

def initialize(movie_name,rank) 
    @movie_name = movie_name 
    @rank = rank 
end 

def thumbs_up 
    @rank = @rank + 1 
    display 
end 

def thumds_down 
    @rank = @rank - 1 
    display 
end 

def display 
    puts "Name of Movie #{@movie_name} and Rank #{@rank}" 
end 
end 

class Playlist 
def initialize(name) 
    @name = name 
    @movies = [] 
end 

def add_movies movie 
    @movies << movie 
end 

def play 
    @movies.each { |movie| movie.display } 
end 
end 
0

Während wir Objekt im Spiel Verfahren druckten und wenn wir wollen, dass eine Zeichenfolge gedruckt wird, müssen wir sie in der Filmklasse überladen. Unten ist der korrekte Code:

class Movie 

attr_accessor :movie_name 
attr_reader :rank 

def initialize(movie_name,rank=0) 
    @movie_name = movie_name.upcase 
    @rank = rank 
end 
def thumbs_up 
    @rank = @rank + 1 
end 

def thumds_down 
    @rank = @rank - 1 
end 
def to_s 
"Name of Movie #{@movie_name} and Rank #{@rank}" 
end 
end 

class Playlist 

def initialize(name) 
    @name = name 
    @movies = [] 
end 
def add_movies movie 
    @movies << movie 
end 
def play 
    puts "#{@name}'s Playlist:" 
    puts @movies 

    @movies.each do |movie| 
     movie.thumbs_up 
     puts movie 
    end 
    end 
    end 


    movie1 = Movie.new("Devil",10) 

    movie2 = Movie.new("Inception",3) 

    playlist1 = Playlist.new("John") 
    playlist1.add_movies(movie1) 
    playlist1.add_movies(movie2) 
    playlist1.play 

    Output: 
    John's Playlist: 
    Name of Movie DEVIL and Rank 10 
    Name of Movie INCEPTION and Rank 3 
    Name of Movie DEVIL and Rank 11 
    Name of Movie INCEPTION and Rank 4