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

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

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

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

Q&A

4回答

3287閲覧

ruby 配列同士で計算が上手くできません。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

0クリップ

投稿2017/02/05 08:05

###前提・実現したいこと
配列同士の四則演算ができないです。
どうしても下記のエラーになってしまいます。
ネットで調べてもinjectなど配列内の計算しか見当たりませんでした…
どうすれば上手く計算できるのか、お教授頂ければ幸いです。
###発生している問題・エラーメッセージ

undefined method `-' for nil:NilClass (NoMethodError)

ruby

1sample01 = [30, 30] 2sample02 = [40, 20, 20] 3 42.times do |i| 5 if (sample01[0] - sample02[0]) * (sample01[0] - sample02[0]) + (sample01[1] - sample02[1]) * (sample01[1] - sample02[1]) >= sample02[2] * sample02[2] 6 puts maru 7 else 8 puts batu 9 end 10 end 11

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

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

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

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

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

otn

2017/02/05 08:15

貼り付けるプログラムを間違えていますよ。
退会済みユーザー

退会済みユーザー

2017/02/05 08:24

申しわけございません。ご指摘ありがとうございます!
otn

2017/02/07 03:18

ミスはいいので、ちゃんと質問を書き直してください。回答者に失礼です。
guest

回答4

0

Ruby

1sample01 = [30, 30] 2sample02 = [40, 20, 20] 3 42.times do |i| 5 if (sample01[0] - sample02[0]) * (sample01[0] - sample02[0]) + (sample01[1] - sample02[1]) * (sample01[1] - sample02[1]) >= sample02[2] * sample02[2] 6 puts "maru" 7 else 8 puts "batu" 9 end 10 end

結果

Ruby

1batu 2batu

私もやってみましたが、「maruとbatuって何ですか?」というエラー以外は
発生しませんでした。
なので、他の方と同様に文字列にしました。
私が使っているRubyは2.2.6のwindows32bit版です。

投稿2017/02/05 17:15

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/02/06 02:48

検証していただき、ありがとうございます!
guest

0

質問にある現象は再現しません。

ruby

1$ cat a.rb 2 3maru = 'o' 4batu = 'x' 5 6sample01 = [30, 30] 7sample02 = [40, 20, 20] 8 92.times do |i| 10 if (sample01[0] - sample02[0]) * (sample01[0] - sample02[0]) + (sample01[1] - sample02[1]) * (sample01[1] - sample02[1]) >= sample02[2] * sample02[2] 11 puts maru 12 else 13 puts batu 14 end 15end 16 17$ ruby a.rb 18x 19x 20 21$ ruby --version 22ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin15]

投稿2017/02/05 10:38

katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2017/02/05 13:48

ご回答ありがとうございます! 僕のミスでした… 申しわけございません。
guest

0

貼り付けたコードで、指摘のようなエラーは出ませんが…

paiza.ioに置いたものmarubatuの定義がなかったので、文字列に差し替えています。

投稿2017/02/05 09:18

maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2017/02/05 13:49

ご回答ありがとうございます! 勉強になります!
guest

0

if (sample01[0] - sample02[0]) * (sample01[0] - sample02[0]) + (sample01[1] - sample02[1]) * (sample01[1] - sample02[1]) >= sample02[2] * sample02[2] then

の行の最後にthenが必要です。

ruby

1if (sample01[0] - sample02[0]) * (sample01[0] - sample02[0]) + (sample01[1] - sample02[1]) * (sample01[1] - sample02[1]) >= sample02[2] * sample02[2] then 2

投稿2017/02/05 08:38

seastar3

総合スコア2285

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

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

seastar3

2017/02/05 09:37

とりあえず検証してみたのですが、thenをつけたら動作しましたよ。 endが付いている以上、入れ子の範囲を明確にする必要があるのでしょう。
maisumakun

2017/02/05 09:44

Rubyのバージョンに依存するのかもしれませんね(paizaのは2.3.3です)
otn

2017/02/05 10:42

> thenをつけたら動作しましたよ。 thenを付けても付けなくても動作に影響しません。
退会済みユーザー

退会済みユーザー

2017/02/05 13:50

検証していただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問