質問編集履歴
5
追記④の質問文の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -287,7 +287,7 @@
|
|
287
287
|
end
|
288
288
|
```
|
289
289
|
|
290
|
-
追記④
|
290
|
+
追記④ ようやく上手くいった
|
291
291
|
|
292
292
|
```Ruby
|
293
293
|
# main.rb
|
4
追記④を追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -252,23 +252,62 @@
|
|
252
252
|
`car.rb` で `if 〜 return 〜` を使ったが走行時間とソートが合わず。。。
|
253
253
|
|
254
254
|
```Ruby
|
255
|
+
追記②と同じ
|
256
|
+
```
|
257
|
+
|
258
|
+
```Ruby
|
259
|
+
# car.rb
|
260
|
+
# parent class
|
261
|
+
class Car
|
262
|
+
attr_accessor :type, :speed, :price, :capacity, :height, :passenger, :distance, :brake_speed, :race_time
|
263
|
+
|
264
|
+
def initialize(type, speed, price, capacity, height, passenger)
|
265
|
+
@type = type
|
266
|
+
@speed = speed
|
267
|
+
@price = price
|
268
|
+
@capacity = capacity
|
269
|
+
@height = height
|
270
|
+
@passenger = passenger
|
271
|
+
end
|
272
|
+
|
273
|
+
def equipment
|
274
|
+
%w[アクセル ブレーキ]
|
275
|
+
end
|
276
|
+
|
277
|
+
def time #レースタイムを算出
|
278
|
+
@distance = 10000 #走行距離
|
279
|
+
@brake_speed = @speed/2 #減速時の速度
|
280
|
+
random = Random.new
|
281
|
+
@brake_time = random.rand(1..5) #今回はブレーキを踏む回数を1〜5回でランダム設定
|
282
|
+
@race_time = @distance / (@brake_speed*@brake_time) + (@distance-@brake_speed*@brake_time) / @speed #タイム算出の計算式・・・ 減速時に進んだ時間 + 通常時に進んだ時間の和
|
283
|
+
if @race_time > 0 #これだとソートが合わない。
|
284
|
+
return @race_time
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
288
|
+
```
|
289
|
+
|
290
|
+
追記④
|
291
|
+
|
292
|
+
```Ruby
|
293
|
+
# main.rb
|
255
294
|
require_relative 'car'
|
256
295
|
require_relative 'ferrari'
|
257
296
|
require_relative 'honda'
|
258
297
|
require_relative 'nissan'
|
259
298
|
require_relative 'toyota'
|
260
299
|
|
261
|
-
def main
|
300
|
+
def main #(type, speed, price, capacity, height, passenger)
|
262
301
|
h = Honda.new("Honda", 100, 100, 8, 100, 1)
|
263
302
|
n = Nissan.new("Nissan", 120, 50, 5, 100, 1)
|
264
303
|
f = Ferrari.new("Ferrari", 200, 2000, 2, 100, 1)
|
265
304
|
t = Toyota.new("Toyota", 100, 300, 2, 100, 1)
|
266
305
|
|
267
|
-
output_information(h,n,f,t)
|
306
|
+
output_information(h,n,f,t) # ここで走行時間が計算されて保存される。car.rb の 「def time」 のelseで走行時間が計算される
|
268
307
|
|
269
308
|
puts '-----順位-------'
|
270
309
|
arr = [h, n, f, t]
|
271
|
-
puts arr.sort_by{|x| x.time}.map(&:type) # 保存した走行時間をソートして表示。上
|
310
|
+
puts arr.sort_by{|x| x.time}.map(&:type) # 保存した走行時間をソートして表示。 上記の「output_information(h,n,f,t)」で走行時間が既に計算されてるからここではその計算結果が表示される
|
272
311
|
end
|
273
312
|
|
274
313
|
def output_information(h,n,f,t)
|
@@ -290,7 +329,7 @@
|
|
290
329
|
# car.rb
|
291
330
|
# parent class
|
292
331
|
class Car
|
293
|
-
attr_accessor :type, :speed, :price, :capacity, :height, :passenger
|
332
|
+
attr_accessor :type, :speed, :price, :capacity, :height, :passenger
|
294
333
|
|
295
334
|
def initialize(type, speed, price, capacity, height, passenger)
|
296
335
|
@type = type
|
@@ -310,9 +349,11 @@
|
|
310
349
|
@brake_speed = @speed/2 #減速時の速度
|
311
350
|
random = Random.new
|
312
351
|
@brake_time = random.rand(1..5) #今回はブレーキを踏む回数を1〜5回でランダム設定
|
352
|
+
|
353
|
+
if @time # @time が存在するならその時間を表示(1回目は存在しない)
|
354
|
+
@time
|
355
|
+
else # @time が存在しないなら計算する → 1回目だけ計算して2回目以降は計算結果だけでソートできるようにしてる
|
313
|
-
|
356
|
+
@time = @distance / (@brake_speed*@brake_time) + (@distance-@brake_speed*@brake_time) / @speed #タイム算出の計算式・・・ 減速時に進んだ時間 + 通常時に進んだ時間の和
|
314
|
-
if @race_time > 0 #これだとソートが合わない。
|
315
|
-
return @race_time
|
316
357
|
end
|
317
358
|
end
|
318
359
|
end
|
3
質問文の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -176,4 +176,144 @@
|
|
176
176
|
return @race_time
|
177
177
|
end
|
178
178
|
end
|
179
|
+
```
|
180
|
+
|
181
|
+
【追記②】
|
182
|
+
①の方法だと `def time` で走行時間を計算しないと `def race_time` で計算できないという制約が生じてしまう。
|
183
|
+
`def time` の中に 走行時間を保存しようとしたが上手く行かず。。。
|
184
|
+
|
185
|
+
```Ruby
|
186
|
+
require_relative 'car'
|
187
|
+
require_relative 'ferrari'
|
188
|
+
require_relative 'honda'
|
189
|
+
require_relative 'nissan'
|
190
|
+
require_relative 'toyota'
|
191
|
+
|
192
|
+
def main #(type, speed, price, capacity, height, passenger)
|
193
|
+
h = Honda.new("Honda", 100, 100, 8, 100, 1)
|
194
|
+
n = Nissan.new("Nissan", 120, 50, 5, 100, 1)
|
195
|
+
f = Ferrari.new("Ferrari", 200, 2000, 2, 100, 1)
|
196
|
+
t = Toyota.new("Toyota", 100, 300, 2, 100, 1)
|
197
|
+
|
198
|
+
output_information(h,n,f,t)
|
199
|
+
|
200
|
+
puts '-----順位-------'
|
201
|
+
arr = [h, n, f, t]
|
202
|
+
puts arr.sort_by{|x| x.time}.map(&:type) # 保存した走行時間をソートして表示。上手く行かない。
|
203
|
+
end
|
204
|
+
|
205
|
+
def output_information(h,n,f,t)
|
206
|
+
puts "\t\t#{h.type}\t\t#{n.type}\t\t#{f.type}\t\t#{t.type}"
|
207
|
+
puts "加速\t\t#{h.speed}\t\t#{n.speed}\t\t#{f.speed}\t\t#{t.speed}"
|
208
|
+
puts "価格\t\t#{h.price}\t\t#{n.price}\t\t#{f.price}\t\t#{t.price}"
|
209
|
+
puts "定員\t\t#{h.capacity}\t\t#{n.capacity}\t\t#{f.capacity}\t\t#{t.capacity}"
|
210
|
+
puts "車高\t\t#{h.height}\t\t#{n.height}\t\t#{f.height}\t\t#{t.height}"
|
211
|
+
puts "乗員\t\t#{h.passenger}\t\t#{n.passenger}\t\t#{f.passenger}\t\t#{t.passenger}"
|
212
|
+
puts "走行時間\t\t#{h.time}\t\t#{n.time}\t\t#{f.time}\t\t#{t.time}"
|
213
|
+
end
|
214
|
+
|
215
|
+
if __FILE__ == $0
|
216
|
+
main
|
217
|
+
end
|
218
|
+
```
|
219
|
+
|
220
|
+
```Ruby
|
221
|
+
# car.rb
|
222
|
+
# parent class
|
223
|
+
class Car
|
224
|
+
attr_accessor :type, :speed, :price, :capacity, :height, :passenger, :distance, :brake_speed, :race_time
|
225
|
+
|
226
|
+
def initialize(type, speed, price, capacity, height, passenger)
|
227
|
+
@type = type
|
228
|
+
@speed = speed
|
229
|
+
@price = price
|
230
|
+
@capacity = capacity
|
231
|
+
@height = height
|
232
|
+
@passenger = passenger
|
233
|
+
end
|
234
|
+
|
235
|
+
def equipment
|
236
|
+
%w[アクセル ブレーキ]
|
237
|
+
end
|
238
|
+
|
239
|
+
def time
|
240
|
+
#レースタイムを算出。
|
241
|
+
@distance = 10000 #走行距離
|
242
|
+
@brake_speed = @speed/2 #減速時の速度
|
243
|
+
random = Random.new
|
244
|
+
@brake_time = random.rand(1..5) #今回はブレーキを踏む回数を1〜5回でランダム設定
|
245
|
+
@race_time = @distance / (@brake_speed*@brake_time) + (@distance-@brake_speed*@brake_time) / @speed #タイム算出の計算式・・・ 減速時に進んだ時間 + 通常時に進んだ時間の和
|
246
|
+
return @race_time #走行時間を保存
|
247
|
+
end
|
248
|
+
end
|
249
|
+
```
|
250
|
+
|
251
|
+
【追記③】
|
252
|
+
`car.rb` で `if 〜 return 〜` を使ったが走行時間とソートが合わず。。。
|
253
|
+
|
254
|
+
```Ruby
|
255
|
+
require_relative 'car'
|
256
|
+
require_relative 'ferrari'
|
257
|
+
require_relative 'honda'
|
258
|
+
require_relative 'nissan'
|
259
|
+
require_relative 'toyota'
|
260
|
+
|
261
|
+
def main #(type, speed, price, capacity, height, passenger)
|
262
|
+
h = Honda.new("Honda", 100, 100, 8, 100, 1)
|
263
|
+
n = Nissan.new("Nissan", 120, 50, 5, 100, 1)
|
264
|
+
f = Ferrari.new("Ferrari", 200, 2000, 2, 100, 1)
|
265
|
+
t = Toyota.new("Toyota", 100, 300, 2, 100, 1)
|
266
|
+
|
267
|
+
output_information(h,n,f,t)
|
268
|
+
|
269
|
+
puts '-----順位-------'
|
270
|
+
arr = [h, n, f, t]
|
271
|
+
puts arr.sort_by{|x| x.time}.map(&:type) # 保存した走行時間をソートして表示。上手く行かない。
|
272
|
+
end
|
273
|
+
|
274
|
+
def output_information(h,n,f,t)
|
275
|
+
puts "\t\t#{h.type}\t\t#{n.type}\t\t#{f.type}\t\t#{t.type}"
|
276
|
+
puts "加速\t\t#{h.speed}\t\t#{n.speed}\t\t#{f.speed}\t\t#{t.speed}"
|
277
|
+
puts "価格\t\t#{h.price}\t\t#{n.price}\t\t#{f.price}\t\t#{t.price}"
|
278
|
+
puts "定員\t\t#{h.capacity}\t\t#{n.capacity}\t\t#{f.capacity}\t\t#{t.capacity}"
|
279
|
+
puts "車高\t\t#{h.height}\t\t#{n.height}\t\t#{f.height}\t\t#{t.height}"
|
280
|
+
puts "乗員\t\t#{h.passenger}\t\t#{n.passenger}\t\t#{f.passenger}\t\t#{t.passenger}"
|
281
|
+
puts "走行時間\t\t#{h.time}\t\t#{n.time}\t\t#{f.time}\t\t#{t.time}"
|
282
|
+
end
|
283
|
+
|
284
|
+
if __FILE__ == $0
|
285
|
+
main
|
286
|
+
end
|
287
|
+
```
|
288
|
+
|
289
|
+
```Ruby
|
290
|
+
# car.rb
|
291
|
+
# parent class
|
292
|
+
class Car
|
293
|
+
attr_accessor :type, :speed, :price, :capacity, :height, :passenger, :distance, :brake_speed, :race_time
|
294
|
+
|
295
|
+
def initialize(type, speed, price, capacity, height, passenger)
|
296
|
+
@type = type
|
297
|
+
@speed = speed
|
298
|
+
@price = price
|
299
|
+
@capacity = capacity
|
300
|
+
@height = height
|
301
|
+
@passenger = passenger
|
302
|
+
end
|
303
|
+
|
304
|
+
def equipment
|
305
|
+
%w[アクセル ブレーキ]
|
306
|
+
end
|
307
|
+
|
308
|
+
def time #レースタイムを算出
|
309
|
+
@distance = 10000 #走行距離
|
310
|
+
@brake_speed = @speed/2 #減速時の速度
|
311
|
+
random = Random.new
|
312
|
+
@brake_time = random.rand(1..5) #今回はブレーキを踏む回数を1〜5回でランダム設定
|
313
|
+
@race_time = @distance / (@brake_speed*@brake_time) + (@distance-@brake_speed*@brake_time) / @speed #タイム算出の計算式・・・ 減速時に進んだ時間 + 通常時に進んだ時間の和
|
314
|
+
if @race_time > 0 #これだとソートが合わない。
|
315
|
+
return @race_time
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
179
319
|
```
|
2
追記①の文章を修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -105,7 +105,8 @@
|
|
105
105
|
|
106
106
|
【追記①】
|
107
107
|
|
108
|
+
`car.rb` で `@race_time` を使って定義しました。(走行時間を保存して出力するように定義)
|
108
|
-
|
109
|
+
実行ファイル ( `main.rb` ) のarray で `x.race_time` で出力するとうまくいく(とりあえず5回連続成功)
|
109
110
|
|
110
111
|
```Ruby
|
111
112
|
require_relative 'car'
|
1
追記①の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -101,4 +101,78 @@
|
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
104
|
+
```
|
105
|
+
|
106
|
+
【追記①】
|
107
|
+
|
108
|
+
`car.rb` で `@race_time` を使って定義して 実行ファイル `main.rb` のarray で `x.race_time` で出力するとうまくいく(とりあえず5回連続成功)
|
109
|
+
|
110
|
+
```Ruby
|
111
|
+
require_relative 'car'
|
112
|
+
require_relative 'ferrari'
|
113
|
+
require_relative 'honda'
|
114
|
+
require_relative 'nissan'
|
115
|
+
require_relative 'toyota'
|
116
|
+
|
117
|
+
def main #(type, speed, price, capacity, height, passenger)
|
118
|
+
h = Honda.new("Honda", 100, 100, 8, 100, 1)
|
119
|
+
n = Nissan.new("Nissan", 120, 50, 5, 100, 1)
|
120
|
+
f = Ferrari.new("Ferrari", 200, 2000, 2, 100, 1)
|
121
|
+
t = Toyota.new("Toyota", 100, 300, 2, 100, 1)
|
122
|
+
|
123
|
+
output_information(h,n,f,t)
|
124
|
+
|
125
|
+
puts '-----順位-------'
|
126
|
+
arr = [h, n, f, t]
|
127
|
+
puts arr.sort_by{|x| x.race_time}.map(&:type)
|
128
|
+
end
|
129
|
+
|
130
|
+
def output_information(h,n,f,t)
|
131
|
+
puts "\t\t#{h.type}\t\t#{n.type}\t\t#{f.type}\t\t#{t.type}"
|
132
|
+
puts "加速\t\t#{h.speed}\t\t#{n.speed}\t\t#{f.speed}\t\t#{t.speed}"
|
133
|
+
puts "価格\t\t#{h.price}\t\t#{n.price}\t\t#{f.price}\t\t#{t.price}"
|
134
|
+
puts "定員\t\t#{h.capacity}\t\t#{n.capacity}\t\t#{f.capacity}\t\t#{t.capacity}"
|
135
|
+
puts "車高\t\t#{h.height}\t\t#{n.height}\t\t#{f.height}\t\t#{t.height}"
|
136
|
+
puts "乗員\t\t#{h.passenger}\t\t#{n.passenger}\t\t#{f.passenger}\t\t#{t.passenger}"
|
137
|
+
puts "走行時間\t\t#{h.time}\t\t#{n.time}\t\t#{f.time}\t\t#{t.time}"
|
138
|
+
end
|
139
|
+
|
140
|
+
if __FILE__ == $0
|
141
|
+
main
|
142
|
+
end
|
143
|
+
```
|
144
|
+
|
145
|
+
```Ruby
|
146
|
+
# car.rb
|
147
|
+
# parent class
|
148
|
+
class Car
|
149
|
+
attr_accessor :type, :speed, :price, :capacity, :height, :passenger, :distance, :brake_speed, :race_time
|
150
|
+
|
151
|
+
def initialize(type, speed, price, capacity, height, passenger)
|
152
|
+
@type = type
|
153
|
+
@speed = speed
|
154
|
+
@price = price
|
155
|
+
@capacity = capacity
|
156
|
+
@height = height
|
157
|
+
@passenger = passenger
|
158
|
+
end
|
159
|
+
|
160
|
+
def equipment
|
161
|
+
%w[アクセル ブレーキ]
|
162
|
+
end
|
163
|
+
|
164
|
+
def time
|
165
|
+
#レースタイムを算出。
|
166
|
+
@distance = 10000 #走行距離
|
167
|
+
@brake_speed = @speed/2 #減速時の速度
|
168
|
+
random = Random.new
|
169
|
+
@brake_time = random.rand(1..5) #今回はブレーキを踏む回数を1〜5回でランダム設定
|
170
|
+
@race_time = @distance / (@brake_speed*@brake_time) + (@distance-@brake_speed*@brake_time) / @speed #タイム算出の計算式・・・ 減速時に進んだ時間 + 通常時に進んだ時間の和
|
171
|
+
# @race_time を使って下記の 「def race_time」で出力できるように
|
172
|
+
end
|
173
|
+
|
174
|
+
def race_time
|
175
|
+
return @race_time
|
176
|
+
end
|
177
|
+
end
|
104
178
|
```
|