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

回答編集履歴

1

補足

2017/01/09 09:02

投稿

退会済みユーザー
answer CHANGED
@@ -2,4 +2,120 @@
2
2
  そのように仮定して、手を加えて実行してみたところ上のエラーは出ませんでした。
3
3
  私もよくそのエラーを出します。私の場合はだいたいendの数が多かったり少なかったり
4
4
  することが原因です。
5
- 私もAtomを使っています。
5
+ 私もAtomを使っています。
6
+ ```Ruby
7
+ require 'date'
8
+
9
+ class BookInfo
10
+ def initialize( title, author, page, publish_date )
11
+ @title = title
12
+ @author = author
13
+ @page = page
14
+ @publish_date = publish_date
15
+ end
16
+
17
+ attr_accessor :title, :author, :page, :publish_date
18
+ def to_s
19
+ "#{@title}, #{@author}, #{@page}, #{@publish_date}"
20
+ end
21
+
22
+ def toFormattedString( sep = "\n" )
23
+ "書籍名: #{@title}#{sep}著書名: #{author}#{sep}ページ数: #{@page}ぺ―ジ#{sep}発刊日: #{@publish_date}#{sep}"
24
+ end
25
+ end
26
+
27
+ class BookInfoManager
28
+ def initialize
29
+ @book_infos = {}
30
+ end
31
+
32
+ def setUp
33
+ @book_infos["Yamada2005"] = BookInfo.new(
34
+ "実践アジャイル ソフトウェア開発法とプロジェクト管理",
35
+ "山田 正樹",
36
+ 248,
37
+ Date.new( 2005, 1, 25 ) )
38
+ @book_infos["Ooba2006"] = BookInfo.new(
39
+ "入門LEGO MINDSTORMS NXT レゴブロックで動くロボット",
40
+ "大庭 慎一郎",
41
+ 164,
42
+ Date.new( 2006, 12, 23 ) )
43
+ end
44
+
45
+ def addBookInfo
46
+ book_info = BookInfo.new( "", "", 0, Date.new )
47
+ print "\n"
48
+ print "キー: "
49
+ key = gets.chomp.encode("UTF-8")
50
+ print "書籍名: "
51
+ book_info.title = gets.chomp.encode("UTF-8")
52
+ print "著者名: "
53
+ book_info.author = gets.chomp.encode("UTF-8")
54
+ print "ページ数: "
55
+ book_info.page = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_i
56
+ print "発刊年: "
57
+ year = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_i
58
+ print "発刊月: "
59
+ month = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_i
60
+ print "発刊日: "
61
+ day = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_i
62
+ book_info.publish_date = Date.new( year, month, day )
63
+ @book_infos[key] = book_info
64
+ end
65
+ def listAllBookInfos
66
+ puts "\n---------------------"
67
+ @book_infos.each { |key, info|
68
+ print info.toFormattedString
69
+ puts "\n----------------------------"
70
+ }
71
+ end
72
+ def run
73
+ while true
74
+ print "
75
+ 1.蔵書データの登録
76
+ 2.蔵書データの表示
77
+ 9.終了
78
+ 番号を選んでください(1,2,9) :"
79
+
80
+ num = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_s
81
+ case
82
+ when '1' == num
83
+ addBookInfo
84
+ when '2' == num
85
+ listAllBookInfos
86
+ when '9' == num
87
+ break;
88
+ else
89
+ end
90
+ end
91
+ end
92
+ book_info_manager = BookInfoManager.new
93
+ book_info_manager.setUp
94
+ book_info_manager.run
95
+ end
96
+ ```
97
+ 前回のプログラムのうち、該当箇所を入れ替えたものです。
98
+ 入力したデータは以下のとおりです。
99
+ ```
100
+ (キー)821227(半角)
101
+ (書籍名)ももたろう
102
+ (著者名)山田 鈴木(山田<スペース>鈴木)
103
+ (ページ数)821(半角)
104
+ (発刊年)1981(半角)
105
+ (発刊月)4(半角)
106
+ (発刊日)6(半角)
107
+ ```
108
+ この内容で私が実行したところ、エラーは発生しませんでした。
109
+ 実行結果例
110
+ ```
111
+ ----------------------------
112
+ 書籍名: ももたろう
113
+ 著書名: 山田 鈴木
114
+ ページ数: 821ぺ―ジ
115
+ 発刊日: 1981-04-06
116
+
117
+ ----------------------------
118
+ ```
119
+ 質問者様はエラーが発生するでしょうか?
120
+ もしこれでエラーが発生するようならプログラム
121
+ 以外に問題があるのかもしれません。