11/17の業務報告

こんばんは、B3の鈴木です。
1年生のみなさんのプログラミング課題もあと1週間ですね。
でも2・3年生になっても課題やテストはいっぱいあります。いっしょにがんばりましょう!
今日の質問と回答です。
***********************
【プログラミング演習1】
Q1.攻撃力の合計が出せない
A1.X(合計値を保存したい変数) = ハッシュの値[0] + ハッシュの値[1]としていたため、繰り返すたびにXが更新されていました。i=0を1ずつ増やし0から10まで表示させたいときにどうするか考えてもらい、その応用でできるはずです、と答えました。
Q2.平均を求めるための合計が出せない
A2.Q1の回答と同じです。
Q3.キャラのステータスがうまく表示されない
A3.変数がどのように変化しているか把握していなかったので、トレースして確かめてもらいました。
Q4.最大キャラとその値が表示できない
A4.ハッシュの値を比較する方法が理解できていないようだったので、配列を値とするハッシュではなく、普通のハッシュで比較する際の場合を考えてもらい、やり方を理解してもらいました。
Q5.平均値と最大値を出せない
A5.メソッドを定義する際の引数の使い方がよくわかっていないようだったので、定義の仕方から復習してもらいました。
Q6.平均値を出せない
A6.Q5の回答と同じです。
Q7.最大キャラは出せたが、値が出せない
A7.最大キャラは出せたのですが、そのキャラ名(ハッシュのキー)を用いてハッシュの値を呼び出す方法が分からないようでしたので、プログラミング演習Iのページにあるヒントや、普通のハッシュで値を呼び出す際の方法を確認してもらいました。
Q8.攻撃力の平均と最大値が出せない
A8.例えば、以下のようなプログラムを組んだとします。
【ピリオドが入力されるまで繰り返す】
name = gets.chomp
a = gets.chomp
b = gets.chomp
配列 = [a, b]
ハッシュ[name] = 配列
【はじめにもどる】
始めに、nameに「犬」、aに「100」、bに「200」を入力したとします。さらに入力を繰り返し、最後にnameに「猫」、aに「10」、bに「20」を入力し、ピリオドで終えたとします。ハッシュのキーを「犬」、そのなかの「100」を取り出したい場合に、
print(犬,” = “, ハッシュ[‘犬’][a], “\n”)
としても、コマンドプロンプト上に「犬=100」とは表示されません。ハッシュに入れた時点で、始めにaに代入された「100」とハッシュのキーを「犬」としたときの値である「100」は別のものになっています。また、入力処理を終えたとき、aの値はすでに「100」ではなくなっています。変数の変化を追ってみてください。
Q9.private method `chomp’ called for nil:NilClass (NoMethodError)というエラーが出る.
A9.メソッドchomp がnil に対して呼ばれているというのは,今回のプログラムでいうと具体的にどういう状況かわかりますか?と尋ねました.具体的には. gets.chomp と書いてあったので, gets が nil であるということになります.そこで,標準入力からの入力が nil になっていないか確認することにしました.確認すると,標準入力で指定していたファイルが空でした.
Q10.undefined local variable or method `x’ for main:Object (NameError) というエラーが出る.
A10.聞いてみると,「xを初期化していないのが原因かもしれないと思って,xを書いたんですけど,それでもエラーが出たので元に戻した」ということだったので,xは書いた状態にしてもらいました。そうすると,別のエラーが出たので,そちらに取り組みました。
Q11.複数の値を return して,それを表示するとくっついて表示されてしまう.もっと見やすく表示したい.
A11.return の使い方を「たのしいRuby」で調べてもらいました.次に,複数の値を return する方法をネットで調べてみましょう,と回答しました.「ruby 複数 return」で検索すると,多重代入の例があったので,それを真似ることにしました.
Q12.最大値を求めたいが、初期値をどのように設定すればいいのか
A12.繰り返しの際に、1回目に取得した値のみを初期値として設定するようにすればいいので、考えてみて下さい、と回答しました。
Q13.最大値は求められるが、どうやってそのときのキャラを求めればいいのか。
A13.値を比較して最大値が見つかったとき、一緒にキャラの名前も保存しておけばいいのではないでしょうか、とアドバイスしました。
(回答:Q1~8,12,13 鈴木、Q9~11 安永)
***********************
メソッドの定義がよくわからない方が多いようです。
教科書等で復習してみてください!
(文責:鈴木)