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

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

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

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

1回答

581閲覧

なぜこの時にifの条件分岐に対してエラーがでるのかがわからない

kohei_04

総合スコア12

Ruby

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2021/11/09 13:24

#わからないこと
単体で確認すると"false"や"true"が返って来るのに条件分岐でアルゴリズムの中に組み込むとエラーが出る。

#お題
1行目で文字列 s、2行目で文字列 t が入力されます。
s が t の中で何回出現するかカウントして出力してください。

##入力/出力例

#入力例 AA abdeeAAbAAAbfde
#出力例 3

#現在記述中のコード

ruby

1a = gets 2array = [] 3 4str = gets.chomp.chars 5str.each{ |i| array << i} 6 7a = 0 8y = 0 9array.length.times do 10 if (array[a] + array[a + 1]) == a 11 y += 1 12 a += 1 13 else 14 a += 1 15 end 16end 17puts y

##挙動
イメージ説明

#エラー文 Main.rb:11:in `+': no implicit conversion of nil into String (TypeError) from Main.rb:11:in `block in <main>' from Main.rb:10:in `times' from Main.rb:10:in `<main>'

上記のエラーからとりあえずタイプエラーで+が使えないと解釈しました。
#確認作業
問題の11行目に当たる下記記述を"puts"してみました

(array[a] + array[a + 1]) == a

イメージ説明

不通に動きました。

#疑問点
なぜ単体で"puts"をした時は真偽を返してくれるのにif文に埋め込むとエラーがですのでしょうか??

どなたかご教授頂けますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

takasima20

2021/11/09 13:32

よくわかりませんが array[a + 1] て無条件に参照しても大丈夫なの?
guest

回答1

0

ベストアンサー

画像が意味不明なので無視しますが、
(array[a] + array[a + 1])で、a+1arrayの最終添え字より大きいので、array[a+1]nilになり、「文字列 + nil」でエラーです。文字列に+出来るのは文字列だけです。

そもそも、そのif文は一体何を判断する意図で書いたのでしょう?

投稿2021/11/09 13:37

編集2021/11/10 09:18
otn

総合スコア85901

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

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

winterboum

2021/11/10 09:14

「a が」 ではなく「a+1」が では?
otn

2021/11/10 09:17

ありがとうございます。訂正しておきます。
kohei_04

2021/11/10 14:07

皆様、ご教授ありがとうございます。 お陰様でアルゴリズム組めました!! ```ruby a = gets.chomp array = [] str = gets.chomp.chars str.each{ |i| array << i} z = 5 y = 0 array.length.times do if (array[z].to_s + array[z + 1].to_s) != a z += 1 else y += 1 z += 1 end end puts y ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問