質問編集履歴

5

追記④の質問文の追加

2019/08/05 04:12

投稿

kazuki0714
kazuki0714

スコア28

test CHANGED
File without changes
test CHANGED
@@ -576,7 +576,7 @@
576
576
 
577
577
 
578
578
 
579
- 追記④
579
+ 追記④ ようやく上手くいった
580
580
 
581
581
 
582
582
 

4

追記④を追加

2019/08/05 04:12

投稿

kazuki0714
kazuki0714

スコア28

test CHANGED
File without changes
test CHANGED
@@ -506,6 +506,84 @@
506
506
 
507
507
  ```Ruby
508
508
 
509
+ 追記②と同じ
510
+
511
+ ```
512
+
513
+
514
+
515
+ ```Ruby
516
+
517
+ # car.rb
518
+
519
+ # parent class
520
+
521
+ class Car
522
+
523
+ attr_accessor :type, :speed, :price, :capacity, :height, :passenger, :distance, :brake_speed, :race_time
524
+
525
+
526
+
527
+ def initialize(type, speed, price, capacity, height, passenger)
528
+
529
+ @type = type
530
+
531
+ @speed = speed
532
+
533
+ @price = price
534
+
535
+ @capacity = capacity
536
+
537
+ @height = height
538
+
539
+ @passenger = passenger
540
+
541
+ end
542
+
543
+
544
+
545
+ def equipment
546
+
547
+ %w[アクセル ブレーキ]
548
+
549
+ end
550
+
551
+
552
+
553
+ def time #レースタイムを算出
554
+
555
+ @distance = 10000 #走行距離
556
+
557
+ @brake_speed = @speed/2 #減速時の速度
558
+
559
+ random = Random.new
560
+
561
+ @brake_time = random.rand(1..5) #今回はブレーキを踏む回数を1〜5回でランダム設定
562
+
563
+ @race_time = @distance / (@brake_speed*@brake_time) + (@distance-@brake_speed*@brake_time) / @speed #タイム算出の計算式・・・ 減速時に進んだ時間 + 通常時に進んだ時間の和
564
+
565
+ if @race_time > 0 #これだとソートが合わない。
566
+
567
+ return @race_time
568
+
569
+ end
570
+
571
+ end
572
+
573
+ end
574
+
575
+ ```
576
+
577
+
578
+
579
+ 追記④
580
+
581
+
582
+
583
+ ```Ruby
584
+
585
+ # main.rb
586
+
509
587
  require_relative 'car'
510
588
 
511
589
  require_relative 'ferrari'
@@ -518,7 +596,7 @@
518
596
 
519
597
 
520
598
 
521
- def main #(type, speed, price, capacity, height, passenger)
599
+ def main #(type, speed, price, capacity, height, passenger)
522
600
 
523
601
  h = Honda.new("Honda", 100, 100, 8, 100, 1)
524
602
 
@@ -530,7 +608,7 @@
530
608
 
531
609
 
532
610
 
533
- output_information(h,n,f,t)
611
+ output_information(h,n,f,t) # ここで走行時間が計算されて保存される。car.rb の 「def time」 のelseで走行時間が計算される
534
612
 
535
613
 
536
614
 
@@ -538,7 +616,7 @@
538
616
 
539
617
  arr = [h, n, f, t]
540
618
 
541
- puts arr.sort_by{|x| x.time}.map(&:type) # 保存した走行時間をソートして表示。上手く行かない。
619
+ puts arr.sort_by{|x| x.time}.map(&:type) # 保存した走行時間をソートして表示。 記の「output_information(h,n,f,t)」で走時間が既に計算されてるらここではその計算結果が表示される
542
620
 
543
621
  end
544
622
 
@@ -582,7 +660,7 @@
582
660
 
583
661
  class Car
584
662
 
585
- attr_accessor :type, :speed, :price, :capacity, :height, :passenger, :distance, :brake_speed, :race_time
663
+ attr_accessor :type, :speed, :price, :capacity, :height, :passenger
586
664
 
587
665
 
588
666
 
@@ -622,11 +700,15 @@
622
700
 
623
701
  @brake_time = random.rand(1..5) #今回はブレーキを踏む回数を1〜5回でランダム設定
624
702
 
703
+
704
+
705
+ if @time # @time が存在するならその時間を表示(1回目は存在しない)
706
+
707
+ @time
708
+
709
+ else # @time が存在しないなら計算する → 1回目だけ計算して2回目以降は計算結果だけでソートできるようにしてる
710
+
625
- @race_time = @distance / (@brake_speed*@brake_time) + (@distance-@brake_speed*@brake_time) / @speed #タイム算出の計算式・・・ 減速時に進んだ時間 + 通常時に進んだ時間の和
711
+ @time = @distance / (@brake_speed*@brake_time) + (@distance-@brake_speed*@brake_time) / @speed #タイム算出の計算式・・・ 減速時に進んだ時間 + 通常時に進んだ時間の和
626
-
627
- if @race_time > 0 #これだとソートが合わない。
628
-
629
- return @race_time
630
712
 
631
713
  end
632
714
 

3

質問文の追加

2019/08/05 03:53

投稿

kazuki0714
kazuki0714

スコア28

test CHANGED
File without changes
test CHANGED
@@ -355,3 +355,283 @@
355
355
  end
356
356
 
357
357
  ```
358
+
359
+
360
+
361
+ 【追記②】
362
+
363
+ ①の方法だと `def time` で走行時間を計算しないと `def race_time` で計算できないという制約が生じてしまう。
364
+
365
+ `def time` の中に 走行時間を保存しようとしたが上手く行かず。。。
366
+
367
+
368
+
369
+ ```Ruby
370
+
371
+ require_relative 'car'
372
+
373
+ require_relative 'ferrari'
374
+
375
+ require_relative 'honda'
376
+
377
+ require_relative 'nissan'
378
+
379
+ require_relative 'toyota'
380
+
381
+
382
+
383
+ def main #(type, speed, price, capacity, height, passenger)
384
+
385
+ h = Honda.new("Honda", 100, 100, 8, 100, 1)
386
+
387
+ n = Nissan.new("Nissan", 120, 50, 5, 100, 1)
388
+
389
+ f = Ferrari.new("Ferrari", 200, 2000, 2, 100, 1)
390
+
391
+ t = Toyota.new("Toyota", 100, 300, 2, 100, 1)
392
+
393
+
394
+
395
+ output_information(h,n,f,t)
396
+
397
+
398
+
399
+ puts '-----順位-------'
400
+
401
+ arr = [h, n, f, t]
402
+
403
+ puts arr.sort_by{|x| x.time}.map(&:type) # 保存した走行時間をソートして表示。上手く行かない。
404
+
405
+ end
406
+
407
+
408
+
409
+ def output_information(h,n,f,t)
410
+
411
+ puts "\t\t#{h.type}\t\t#{n.type}\t\t#{f.type}\t\t#{t.type}"
412
+
413
+ puts "加速\t\t#{h.speed}\t\t#{n.speed}\t\t#{f.speed}\t\t#{t.speed}"
414
+
415
+ puts "価格\t\t#{h.price}\t\t#{n.price}\t\t#{f.price}\t\t#{t.price}"
416
+
417
+ puts "定員\t\t#{h.capacity}\t\t#{n.capacity}\t\t#{f.capacity}\t\t#{t.capacity}"
418
+
419
+ puts "車高\t\t#{h.height}\t\t#{n.height}\t\t#{f.height}\t\t#{t.height}"
420
+
421
+ puts "乗員\t\t#{h.passenger}\t\t#{n.passenger}\t\t#{f.passenger}\t\t#{t.passenger}"
422
+
423
+ puts "走行時間\t\t#{h.time}\t\t#{n.time}\t\t#{f.time}\t\t#{t.time}"
424
+
425
+ end
426
+
427
+
428
+
429
+ if __FILE__ == $0
430
+
431
+ main
432
+
433
+ end
434
+
435
+ ```
436
+
437
+
438
+
439
+ ```Ruby
440
+
441
+ # car.rb
442
+
443
+ # parent class
444
+
445
+ class Car
446
+
447
+ attr_accessor :type, :speed, :price, :capacity, :height, :passenger, :distance, :brake_speed, :race_time
448
+
449
+
450
+
451
+ def initialize(type, speed, price, capacity, height, passenger)
452
+
453
+ @type = type
454
+
455
+ @speed = speed
456
+
457
+ @price = price
458
+
459
+ @capacity = capacity
460
+
461
+ @height = height
462
+
463
+ @passenger = passenger
464
+
465
+ end
466
+
467
+
468
+
469
+ def equipment
470
+
471
+ %w[アクセル ブレーキ]
472
+
473
+ end
474
+
475
+
476
+
477
+ def time
478
+
479
+ #レースタイムを算出。
480
+
481
+ @distance = 10000 #走行距離
482
+
483
+ @brake_speed = @speed/2 #減速時の速度
484
+
485
+ random = Random.new
486
+
487
+ @brake_time = random.rand(1..5) #今回はブレーキを踏む回数を1〜5回でランダム設定
488
+
489
+ @race_time = @distance / (@brake_speed*@brake_time) + (@distance-@brake_speed*@brake_time) / @speed #タイム算出の計算式・・・ 減速時に進んだ時間 + 通常時に進んだ時間の和
490
+
491
+ return @race_time #走行時間を保存
492
+
493
+ end
494
+
495
+ end
496
+
497
+ ```
498
+
499
+
500
+
501
+ 【追記③】
502
+
503
+ `car.rb` で `if 〜 return 〜` を使ったが走行時間とソートが合わず。。。
504
+
505
+
506
+
507
+ ```Ruby
508
+
509
+ require_relative 'car'
510
+
511
+ require_relative 'ferrari'
512
+
513
+ require_relative 'honda'
514
+
515
+ require_relative 'nissan'
516
+
517
+ require_relative 'toyota'
518
+
519
+
520
+
521
+ def main #(type, speed, price, capacity, height, passenger)
522
+
523
+ h = Honda.new("Honda", 100, 100, 8, 100, 1)
524
+
525
+ n = Nissan.new("Nissan", 120, 50, 5, 100, 1)
526
+
527
+ f = Ferrari.new("Ferrari", 200, 2000, 2, 100, 1)
528
+
529
+ t = Toyota.new("Toyota", 100, 300, 2, 100, 1)
530
+
531
+
532
+
533
+ output_information(h,n,f,t)
534
+
535
+
536
+
537
+ puts '-----順位-------'
538
+
539
+ arr = [h, n, f, t]
540
+
541
+ puts arr.sort_by{|x| x.time}.map(&:type) # 保存した走行時間をソートして表示。上手く行かない。
542
+
543
+ end
544
+
545
+
546
+
547
+ def output_information(h,n,f,t)
548
+
549
+ puts "\t\t#{h.type}\t\t#{n.type}\t\t#{f.type}\t\t#{t.type}"
550
+
551
+ puts "加速\t\t#{h.speed}\t\t#{n.speed}\t\t#{f.speed}\t\t#{t.speed}"
552
+
553
+ puts "価格\t\t#{h.price}\t\t#{n.price}\t\t#{f.price}\t\t#{t.price}"
554
+
555
+ puts "定員\t\t#{h.capacity}\t\t#{n.capacity}\t\t#{f.capacity}\t\t#{t.capacity}"
556
+
557
+ puts "車高\t\t#{h.height}\t\t#{n.height}\t\t#{f.height}\t\t#{t.height}"
558
+
559
+ puts "乗員\t\t#{h.passenger}\t\t#{n.passenger}\t\t#{f.passenger}\t\t#{t.passenger}"
560
+
561
+ puts "走行時間\t\t#{h.time}\t\t#{n.time}\t\t#{f.time}\t\t#{t.time}"
562
+
563
+ end
564
+
565
+
566
+
567
+ if __FILE__ == $0
568
+
569
+ main
570
+
571
+ end
572
+
573
+ ```
574
+
575
+
576
+
577
+ ```Ruby
578
+
579
+ # car.rb
580
+
581
+ # parent class
582
+
583
+ class Car
584
+
585
+ attr_accessor :type, :speed, :price, :capacity, :height, :passenger, :distance, :brake_speed, :race_time
586
+
587
+
588
+
589
+ def initialize(type, speed, price, capacity, height, passenger)
590
+
591
+ @type = type
592
+
593
+ @speed = speed
594
+
595
+ @price = price
596
+
597
+ @capacity = capacity
598
+
599
+ @height = height
600
+
601
+ @passenger = passenger
602
+
603
+ end
604
+
605
+
606
+
607
+ def equipment
608
+
609
+ %w[アクセル ブレーキ]
610
+
611
+ end
612
+
613
+
614
+
615
+ def time #レースタイムを算出
616
+
617
+ @distance = 10000 #走行距離
618
+
619
+ @brake_speed = @speed/2 #減速時の速度
620
+
621
+ random = Random.new
622
+
623
+ @brake_time = random.rand(1..5) #今回はブレーキを踏む回数を1〜5回でランダム設定
624
+
625
+ @race_time = @distance / (@brake_speed*@brake_time) + (@distance-@brake_speed*@brake_time) / @speed #タイム算出の計算式・・・ 減速時に進んだ時間 + 通常時に進んだ時間の和
626
+
627
+ if @race_time > 0 #これだとソートが合わない。
628
+
629
+ return @race_time
630
+
631
+ end
632
+
633
+ end
634
+
635
+ end
636
+
637
+ ```

2

追記①の文章を修正

2019/08/05 02:57

投稿

kazuki0714
kazuki0714

スコア28

test CHANGED
File without changes
test CHANGED
@@ -212,7 +212,9 @@
212
212
 
213
213
 
214
214
 
215
+ `car.rb` で `@race_time` を使って定義しました。(走行時間を保存して出力するように定義)
216
+
215
- `car.rb` で `@race_time` を使って定義して 実行ファイル `main.rb` のarray で `x.race_time` で出力するとうまくいく(とりあえず5回連続成功)
217
+ 実行ファイル ( `main.rb` ) のarray で `x.race_time` で出力するとうまくいく(とりあえず5回連続成功)
216
218
 
217
219
 
218
220
 

1

追記①の追加

2019/08/05 01:53

投稿

kazuki0714
kazuki0714

スコア28

test CHANGED
File without changes
test CHANGED
@@ -205,3 +205,151 @@
205
205
 
206
206
 
207
207
  ```
208
+
209
+
210
+
211
+ 【追記①】
212
+
213
+
214
+
215
+ `car.rb` で `@race_time` を使って定義して 実行ファイル `main.rb` のarray で `x.race_time` で出力するとうまくいく(とりあえず5回連続成功)
216
+
217
+
218
+
219
+ ```Ruby
220
+
221
+ require_relative 'car'
222
+
223
+ require_relative 'ferrari'
224
+
225
+ require_relative 'honda'
226
+
227
+ require_relative 'nissan'
228
+
229
+ require_relative 'toyota'
230
+
231
+
232
+
233
+ def main #(type, speed, price, capacity, height, passenger)
234
+
235
+ h = Honda.new("Honda", 100, 100, 8, 100, 1)
236
+
237
+ n = Nissan.new("Nissan", 120, 50, 5, 100, 1)
238
+
239
+ f = Ferrari.new("Ferrari", 200, 2000, 2, 100, 1)
240
+
241
+ t = Toyota.new("Toyota", 100, 300, 2, 100, 1)
242
+
243
+
244
+
245
+ output_information(h,n,f,t)
246
+
247
+
248
+
249
+ puts '-----順位-------'
250
+
251
+ arr = [h, n, f, t]
252
+
253
+ puts arr.sort_by{|x| x.race_time}.map(&:type)
254
+
255
+ end
256
+
257
+
258
+
259
+ def output_information(h,n,f,t)
260
+
261
+ puts "\t\t#{h.type}\t\t#{n.type}\t\t#{f.type}\t\t#{t.type}"
262
+
263
+ puts "加速\t\t#{h.speed}\t\t#{n.speed}\t\t#{f.speed}\t\t#{t.speed}"
264
+
265
+ puts "価格\t\t#{h.price}\t\t#{n.price}\t\t#{f.price}\t\t#{t.price}"
266
+
267
+ puts "定員\t\t#{h.capacity}\t\t#{n.capacity}\t\t#{f.capacity}\t\t#{t.capacity}"
268
+
269
+ puts "車高\t\t#{h.height}\t\t#{n.height}\t\t#{f.height}\t\t#{t.height}"
270
+
271
+ puts "乗員\t\t#{h.passenger}\t\t#{n.passenger}\t\t#{f.passenger}\t\t#{t.passenger}"
272
+
273
+ puts "走行時間\t\t#{h.time}\t\t#{n.time}\t\t#{f.time}\t\t#{t.time}"
274
+
275
+ end
276
+
277
+
278
+
279
+ if __FILE__ == $0
280
+
281
+ main
282
+
283
+ end
284
+
285
+ ```
286
+
287
+
288
+
289
+ ```Ruby
290
+
291
+ # car.rb
292
+
293
+ # parent class
294
+
295
+ class Car
296
+
297
+ attr_accessor :type, :speed, :price, :capacity, :height, :passenger, :distance, :brake_speed, :race_time
298
+
299
+
300
+
301
+ def initialize(type, speed, price, capacity, height, passenger)
302
+
303
+ @type = type
304
+
305
+ @speed = speed
306
+
307
+ @price = price
308
+
309
+ @capacity = capacity
310
+
311
+ @height = height
312
+
313
+ @passenger = passenger
314
+
315
+ end
316
+
317
+
318
+
319
+ def equipment
320
+
321
+ %w[アクセル ブレーキ]
322
+
323
+ end
324
+
325
+
326
+
327
+ def time
328
+
329
+ #レースタイムを算出。
330
+
331
+ @distance = 10000 #走行距離
332
+
333
+ @brake_speed = @speed/2 #減速時の速度
334
+
335
+ random = Random.new
336
+
337
+ @brake_time = random.rand(1..5) #今回はブレーキを踏む回数を1〜5回でランダム設定
338
+
339
+ @race_time = @distance / (@brake_speed*@brake_time) + (@distance-@brake_speed*@brake_time) / @speed #タイム算出の計算式・・・ 減速時に進んだ時間 + 通常時に進んだ時間の和
340
+
341
+ # @race_time を使って下記の 「def race_time」で出力できるように
342
+
343
+ end
344
+
345
+
346
+
347
+ def race_time
348
+
349
+ return @race_time
350
+
351
+ end
352
+
353
+ end
354
+
355
+ ```