質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

61126閲覧

【初歩的質問】コード実行すると「no implicit conversion of Symbol into Integer (TypeError)」が出る

YutoTakagi

総合スコア15

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

2クリップ

投稿2015/12/31 07:36

rubyでの質問です。まだ初心者です。現在あるスクールのカリキュラムをやっているのですが、
このようなコードで実行すると「show_all_score」が呼び出されるところで
「no implicit conversion of Symbol into Integer (TypeError)」というエラーが出てしまい
上手く出力ができません。

これはどのように改善できますでしょうか?ご教示いただけると幸いです。

ruby

1def input_score 2 a_scores = {} 3 a_scores[:student]=gets.chomp 4 a_scores[:score]=gets.to_i 5 return a_scores 6end 7 8def show_all_score(scores) 9 student = scores[:student] 10 score = scores[:score] 11 12end 13scores = [] 14while true do 15puts "得点を入力しますか?[0]yes[1]no" 16input = gets.to_i 17if input == 0 18 a_score = input_score 19 scores << a_score 20elsif input == 1 21 show_all_score(scores) 22 exit 23end 24end###ヘディングのテキスト

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

scores が何型かに注目すれば良いかと思います。

Arrayの場合、score[0]のように数字でアクセスが可能です。エラーの内容からは、シンボル型は不都合だと読み取れるはずです。

show_all_scoreメソッドにはすべてを表示する部分が足りていませんので、
show_one_scoreメソッドを作ってから複数個呼び出しにチャレンジすると良いかと思います。

投稿2015/12/31 07:57

miyamiya

総合スコア691

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

動作するように変更してみました。

ruby

1def input_score 2 { 3 name: gets.chomp, # 生徒の名前 4 score: gets.to_i # 生徒の特典 5 } 6end 7 8def show_all_score(scores) 9 scores.each do |student| 10 puts "#{student[:name]}:\t#{student[:score]}" 11 end 12end 13 14scores = [] 15loop do 16 puts '生徒と得点を入力しますか?[0]yes, [1]no' 17 input = gets.to_i 18 if input == 0 19 scores << input_score 20 elsif input == 1 21 show_all_score(scores) 22 exit 23 end 24end

実行例:

$ ruby sample.rb 生徒と得点を入力しますか?[0]yes, [1]no 0 kato 100 生徒と得点を入力しますか?[0]yes, [1]no 0 abe 10 生徒と得点を入力しますか?[0]yes, [1]no 1 kato: 100 abe: 10

投稿2015/12/31 09:45

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YutoTakagi

2015/12/31 10:28

こちらだと動きました。ありがとうございます!
guest

0

ベストアンサー

show_all_scoreにscoresを渡していますが、scoresはArrayです。
:student等のキーを持つHashなのは、scoresの各要素です。

直すべき所は色々ありますが、取りあえず動くようにするには、scoresの各要素について処理するようにshow_all_scoreを書き換えます。

Ruby

1def show_all_score(scores) 2 scores.each do |x| 3 student = x[:student] 4 score = x[:score] 5 puts "#{student}の得点は#{score}です" 6 end 7end

投稿2015/12/31 07:51

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問