tractor_beam
インスタンスのメソッドを追加する必要があります。アイテムの文字列の説明(例:「牛」)をパラメータとして使用します。呼び出されたとき、このメソッドはシールドを無効にし、船の現在の位置と共に物資を追加し、ピックアップするのが重すぎない場合(下記のアルゴリズムを参照)、再度シールドを有効にしてtrueを返します。項目が重すぎてピックアップできない場合、メソッドはインベントリ更新をスキップしてfalseを返します。メソッド呼び出し時の戻り値が正しくありません
Algorithm:
項目は、その文字が.ord
を使用して複数500まで追加あれば拾うためには重すぎる(私は知っている、非常に科学的なわけではありません。)例えば、牛の手紙は、まで追加、私たちのトラクタービームは牛を拉致することができますので、問題ありません。
私の問題は、それがnilと空のハッシュを返すことです。どのようにしてアイテムを分割してそれぞれを追加するのですか?
コード:
class Spaceship
attr_accessor :name, :location, :item, :inventory
attr_reader :max_speed
def initialize (name, max_speed, location)
puts "Initializing new Spaceship"
@name = name
@max_speed = max_speed
@location = location
@item = item
@inventory = {}
end
def disable_shield
puts "Shield is off!"
end
def enable_shield
puts "Shield is on!"
end
def warp_to(location)
puts "Traveling at #{max_speed} to #{location}!"
@location = location
end
def tractor_beam(item)
disable_shield
item = item.split('')
item.each do |let|
let.ord
let + let.next
end
return item
if item > 500
enable_shield
@inventory[@location] = item
return true
else
return false
end
end
end
ドライバコード:
uss_enterprise = Spaceship.new("USS Enterprise","200,000 mph", "China")
hms_anfromeda = Spaceship.new("HMS Andromeda", "108,277 mph", "China")
uss_enterprise.disable_shield
hms_anfromeda.enable_shield
p hms_anfromeda.location
hms_anfromeda.warp_to("Namibia")
p hms_anfromeda.location
hms_anfromeda.tractor_beam("cow")
p hms_anfromeda.item
ターミナル:
Initializing new Spaceship
Initializing new Spaceship
Shield is off!
Shield is on!
"China"
Traveling at 108,277 mph to Namibia!
"Namibia"
Shield is off!
nil
あなたのトラクタービームを選ぶことができます。これは、トリックを行う必要があります
牛を、羽はない? –
もちろん、クラスは「スターシップ」と呼ばれるべきですか? –
トラクタ_ビーム(項目)の37行目の "返品明細"の後にコードに到達することはできません。 'item> 500'が呼び出されない場合。 –