2017-02-09 16 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

アレイiIntegerからなり、@inputStringであるためtrueを返すことはないi.include?(@input)方法。

何が起こっているのかです:

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

それを動作させるには、それを設定するときにInteger@inputを変換することができます。

もう1つのこと:@JörgWMittagでも指摘されているように、String#chompは不要です。to_iは空白も無視します。

ただ、この行に置き換えますと

@input = gets.chomp 

を:

@input = gets.to_i 

そして、それは動作します!

+0

'String#to_i'は空白を無視し、' chomp'する必要はありません。 –

+0

それは働いた!あなたは揺れる! – rstreet

+0

@JörgWMittagありがとう、私はあなたの提案で答えを編集しました – mrlew

関連する問題