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

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

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

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

解決済

2回答

274閲覧

rubyでの整数判断

s_eric

総合スコア184

Ruby

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

1グッド

1クリップ

投稿2019/03/16 08:22

前提・実現したいこと

Rubyにおいてコンソール上から入力された値が整数であるか判断する。
とても、初歩的な質問ですみません。

発生している問題・エラーメッセージ

整数を入力しても、Good!と表示されない。

該当のソースコード

部分的に取り出しました。

Ruby

1loop do 2puts "Please enter any number. >>" 3num = gets 4break if num.class == Integer 5end 6 7puts "Good!"

補足情報(FW/ツールのバージョンなど)

VBox上のUbuntu
ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-linux]

DrqYuto👍を押しています

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

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

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

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

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

guest

回答2

0

イメージ説明

loop do puts "Please enter any number. >>" num = gets.chomp if (num =~ /\A[1-9][0-9]*\z/) == 0 break end end puts "Good!" =begin aだと Please enter any number. >> で戻り 0も Please enter any number. >> で戻り 1だと => nil で終わります。 =end

https://techacademy.jp/magazine/19573

break文の書き方

while文やfor文のループ中で、break文を記述します。

主にif文と組み合わせ、特定条件に合致した場合にループを脱出するようにします。

while {条件} do
# 処理
if {条件}
# 処理
break
end
end

https://qiita.com/pecotech26/items/ee392125727f04bafaed > 「正の整数」ということであれば0はマッチさせないほうがよいのではないかと思います。通常の10進で表記された正整数の正規表現として、 /\A[1-9][0-9]*\z/ > がよく使われます。 ![イメージ説明](95af4e618be6a810e4141841b40cacc5.png)

投稿2019/03/18 09:55

編集2019/03/21 08:30
DrqYuto

総合スコア432

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

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

s_eric

2019/03/19 05:03

丁寧な回答ありがとうございます。 breakの書き方がとても参考になりました。
DrqYuto

2019/03/19 08:22

ありがとうございます。 しかし,Good出てないのでこれじゃダメそうですね。 また、書き直します。
s_eric

2019/03/21 00:55

有難うございます。 自分なりにこんな感じに少し変えてみました。 loop do puts "Please enter any number. >>" num = gets.chomp break if (num =~ /\A[1-9][0-9]*\z/) == 0 end puts "Good!" これだと、Goodが出るようです。いかがでしょうか??
DrqYuto

2019/03/21 08:20

いいんじゃないんでしょうか?帰宅後確認します。
DrqYuto

2019/03/21 08:30

確認できました。いいと思います。
guest

0

ベストアンサー

Rubyのgetsメソッドは、キーボードから入力された文字列を返しますから、1234 とキーを打てば、変数numに1234という整数ではなく"1234"という文字列が入ります。
その結果、num.classはIntegerではなくStringsになり、ループからbreakで抜け出せないのです。
(num.class == Integer が成り立つことはありませんから)
これが、goodが表示されない理由です。

文字列が整数を表すものかどうかを判断するには、すべての文字が数字であることを確かめればよいです。

投稿2019/03/16 08:37

coco_bauer

総合スコア6915

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

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

s_eric

2019/03/16 08:40

なるほど、正規表現を使ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問