2016-08-09 17 views
-1

habe diesen Fehler aber kann nicht herausfinden, wo ich ein Ende setzen muss.Syntaxfehler, unerwartetes Ende der Eingabe, erwartet keyword_end (hilf mir)!

test/test1:54: class definition in method body 
test/test1:79: syntax error, unexpected end-of-input, expecting keyword_end 



class Code 
    attr_reader :pegs 

    def initialize(pegs) 
    @@pegs_key = { "R" => :red,"G" => :green,"B" => :blue,"Y" => :yellow, 
     "O" => :orange,"P" => :purple } 
    @pegs = pegs 
    end 

    class << self 
    def random 
     rand_pegs_set = [] 
     4.times { rand_pegs_set << @@pegs_Key.values.sample } 
     Code.new(rand_pegs_set) 
    end 

    def parse(str) 
     str = string.split("") 
     pegs_set = [] 
     str.each do |letter| 
     if @@pegs_key.has_key?(letter.upcase) 
      pegs_set << @@pegs_key[letter.upcase] 
     else 
      raise "Incorrect colors" 
     end 
     end 
     Code.new(pegs_set) 
    end 
    end 

    def exact_matches(guess) 
    matches = 0 
    pegs_set.each_with_index { |color,i| matches += 1 if self[i] == color } 
    matches 
    end 

    def color_counter 
    counter = Hash.new(0) 
    @pegs.each { |color| counter[color] += 1 } 
    counter 
    end 

    def near_matches(guess) 
     matches = 0 
     code_counter = self.color_counter 
     guess.color_counter.each do |color,count| 
     if code_counter.has_key?(color) 
      if code_counter[color] > count ? matches += count : matches += code_counter[color] 
     end 
     matches - self.exact_matches(guess) 
    end 
end 

class Game 
    attr_reader :secret_code 

    def initialize(secret_code = Code.random) 
    @secret_code = secret_code 
    end 

    def play 
    10.times do 
     puts "Enter your guess" 
     guess = Code.parse(gets.chomp) 
     if guess == @secret_code 
     puts "Great Job! you got it" 
     break 
     end 
     show_matches(guess) 
    end 
    end 

    def show_matches(guess) 
    exact_matches = @secret_code.exact_matches(guess) 
    near_matches = @secret_code.near_matches(guess) 
    puts "#{exact_matches} were exactly right" 
    puts "#{near_matches} were nearly a match" 
    end 
end 
+1

Sieht aus wie 'guess.color_counter.each do' nicht beendet ist; auch, wenn code_counter [farbe]> zählen? Übereinstimmungen + = Anzahl: Übereinstimmungen + = code_counter [color] 'macht wahrscheinlich nicht das, was Sie denken – Amadan

+0

Ich füge ein Ende nach" matches - self.exact_matches (guess) "hinzu und das löste den ersten Fehler, aber den test/test1 : 79: Syntaxfehler, unerwartetes Ende der Eingabe, erwartet, dass keyword_end immer noch da ist. für den if else one liner möchte ich den niedrigeren Wert nehmen und ihn zu "matches" hinzufügen –

Antwort

0

Machen

if code_counter[color] > count ? matches += count : matches += code_counter[color] 

so

matches += (code_counter[color] > count ? count : code_counter[color])