2017-02-09 4 views
0

Я новичок и действительно застрял в этой проблеме. Мне нужен элемент массива, который соответствует пользовательскому входу, который должен быть заменен на «X». Что я делаю не так? Не могли бы вы помочь? Благодаря!пользовательский ввод не обрабатывается

class Round 

    def start 
    display_board 
    pick 
    refresh_board 
    end 

    #displays the board in the begining of the game 
    def display_board 
    @board = [[1,2,3],[4,5,6],[7,8,9]] 
    @board.each do |i| 
     puts i.join("|") 
    end 
    end 

    def refresh_board 
    @changed_board = [] 
    @board.each do |i| 
     if i.include?(@input) 
     r = i.index(@input) 
     i[r] = "X" 
     @changed_board << i 
     else 
     @changed_board << i 
     end 
    end 

    @changed_board.each do |i| 
     puts i.join("|") 
    end 
    end 

#player selects a number 
    def pick 
    puts "player1, select a number:" 
    @input = gets.chomp 
    end 
end 

round1 = Round.new 
round1.start 

ответ

0

Метод i.include?(@input) никогда не возвращает true, поскольку массив i изготовлен из Integer и @input является String.

Вот что происходит:

[1,2,3].include?("1") #=> false 

Чтобы заставить его работать, вы можете конвертировать @input в Integer при установке его.

Другое дело: как указано в @ JörgWMittag, вам не нужно String#chomp, так как to_i игнорирует пробелы.

Просто замените эту строку:

@input = gets.chomp 

с:

@input = gets.to_i 

И это будет работать!

+0

'String # to_i' игнорирует пробелы, не нужно' chomp' it. –

+0

это сработало! ты жжешь!! – rstreet

+0

@ JörgWMittag спасибо, я отредактировал ответ с вашим предложением – mrlew