Reputation: 96484
I have this rspec test:
it 'has a populated chessboard' do
expect(ChessBoard.new.populate_new_board).to eq [
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn']]
end
For this code:
class ChessBoard
def initialize
@board=Array.new(7){Array.new(7)}
end
def populate_new_board
(0..7).each do |row|
(0..7).each do |cell|
@board[row][cell]='pawn'
end
end
@board
end
end
but I'm getting:
1) least number of moves from x to y has a populated chessboard
Failure/Error: expect(ChessBoard.new.populate_new_board).to eq [
NoMethodError:
undefined method `[]=' for nil:NilClass
# ./code.rb:10:in `block (2 levels) in populate_new_board'
# ./code.rb:9:in `each'
# ./code.rb:9:in `block in populate_new_board'
# ./code.rb:8:in `each'
# ./code.rb:8:in `populate_new_board'
# ./code_spec.rb:12:in `block (2 levels) in <top (required)>'
how can I fix this?
btw pawns in every space is not the final result but it's what I want for this test right now (then I can modify it further).
Upvotes: 0
Views: 2469
Reputation: 161
class ChessBoard
def populate_new_board
@board = [['pawn'] * 7] * 7
end
end
Upvotes: 3
Reputation: 16507
As it was denoted that you did a mistake in range, but a strongly advice you to reduce usage of index ranges. You can use :each
, and :map
methods instead:
class ChessBoard
def initialize
@board = Array.new( 7 ){ Array.new( 7 ) }
end
def populate_new_board
@board.each {| row | row.map! {| _ | 'pawn' } }
end
end
But I'd use more the simple code:
class ChessBoard
def populate_new_board
@board = Array.new( 7 ){Array.new( 7 ) { 'pawn' } }
end
end
Upvotes: 0
Reputation: 168101
Change it to:
def populate_new_board
(0...7).each do |row|
(0...7).each do |cell|
@board[row][cell]='pawn'
end
end
@board
end
Upvotes: 1