質問するログイン新規登録

質問編集履歴

5

追記④の質問文の追加

2019/08/05 04:12

投稿

kazuki0714
kazuki0714

スコア28

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

追記④を追加

2019/08/05 04:12

投稿

kazuki0714
kazuki0714

スコア28

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 #(type, speed, price, capacity, height, passenger)
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, :distance, :brake_speed, :race_time
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
- @race_time = @distance / (@brake_speed*@brake_time) + (@distance-@brake_speed*@brake_time) / @speed #タイム算出の計算式・・・ 減速時に進んだ時間 + 通常時に進んだ時間の和
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

質問文の追加

2019/08/05 03:53

投稿

kazuki0714
kazuki0714

スコア28

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

追記①の文章を修正

2019/08/05 02:57

投稿

kazuki0714
kazuki0714

スコア28

title CHANGED
File without changes
body CHANGED
@@ -105,7 +105,8 @@
105
105
 
106
106
  【追記①】
107
107
 
108
+ `car.rb` で `@race_time` を使って定義しました。(走行時間を保存して出力するように定義)
108
- `car.rb` で `@race_time` を使って定義して 実行ファイル `main.rb` のarray で `x.race_time` で出力するとうまくいく(とりあえず5回連続成功)
109
+ 実行ファイル ( `main.rb` ) のarray で `x.race_time` で出力するとうまくいく(とりあえず5回連続成功)
109
110
 
110
111
  ```Ruby
111
112
  require_relative 'car'

1

追記①の追加

2019/08/05 01:53

投稿

kazuki0714
kazuki0714

スコア28

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
  ```