【发布时间】:2024-08-10 21:50:02
【问题描述】:
我正在编写一个程序来重新安排公交车上的乘客。我想记录重新排序公共汽车座位需要多少次洗牌。以为我拥有它,但我无法更改self.reshuffle_count。如何通过reshuffle_seating方法访问@reshufffle_count
class MagicBus < Array
attr_writer :seating
def seating
@seating || []
end
def reshuffle_count
@reshuffle_count || 0
end
def reshuffle_seating
max_passengers = self.seating.max
popular_seat = self.seating.max
pop_seat_indx = self.seating.find_index(popular_seat)
reshuffle_num = 0
self.seating.rotate!(pop_seat_indx)
while popular_seat > 1 do
self.seating.each_with_index do |seat, index|
if index != 0
self.seating[index] = self.seating[index] +1
popular_seat = popular_seat -1
else
reshuffle_num = reshuffle_num +1
p reshuffle_num
end
end
end
self.seating.rotate!(pop_seat_indx*-1)
self.seating[pop_seat_indx] = popular_seat
self.reshuffle_count = reshuffle_num
end
end
class TestMagicBusSeating < MiniTest::Test
def test_reshuffle_seating_instance1
bus = MagicBus.new
bus.seating = [0,2,7,0]
bus.reshuffle_seating
assert_equal([2, 4, 1, 2], bus.seating)
assert_equal(5, bus.reshuffle_count)
end
end
错误信息是
Error:
TestMagicBusSeating#test_reshuffle_seating_instance1:
NoMethodError: undefined method `reshuffle_count=' for []:MagicBus
Did you mean? reshuffle_count
magic_bus.rb:99:in `reshuffle_seating'
magic_bus.rb:217:in `test_reshuffle_seating_instance1'
【问题讨论】:
-
这里从数组继承是一件不寻常的事情。目的是什么?看起来你甚至没有使用那个角度。
-
您的意思可能是
@reshuffle_count = ...,因为您没有attr_writer。