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

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

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

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

Q&A

解決済

3回答

1705閲覧

Rubyで乱数を配列に小さい順で格納するには??

nyui

総合スコア13

Ruby

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

0グッド

1クリップ

投稿2019/07/21 10:19

前提・実現したいこと

ruby
「最初に中身が空な配列numを用意し、1-1000までの整数の乱数を100個生成して
要素を順次追加。配列要素を小さい順にソートした配列をsorted_numに代入して最小値最大値合計値を出力。
sorted_numの要素1行ずつを出力したファイルを作成する。」
という課題です。
sorted_numとnumをどのようにすればいいのかわかりません。
どうかアドバイスお願いいたします!!

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

Traceback (most recent call last): C:/Users/**/Desktop/0720/1-2.rb:9:in `<main>': undefined local variable or method `num' for main:Object (NameError)**

Ruby

100.times do num=Random.rand(1..1000) puts num end sorted_num=num.sort puts sorted_num sorted_num.each do |element| sum=0 sum+=element end puts"最小値は#{sorted_num[0]}でした" puts"最大値は#{sorted_num[-1]}でした" puts"合計値は#{sum}でした" file=File.open("num_out.txt","w") file.puts sorted_num. puts"乱数をnum_out.txtに保存しました" file.close

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

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

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

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

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

guest

回答3

0

エラーに関わる部分は他の回答に譲るとして...
「こういう書き方もあるんだな」くらいに思っていただければ幸いです

ruby

1# 配列の初期化 (100個) 2# 初期化時に値を決める方法を指定 (rand(1..1_000)) 3# NOTE: 数値は桁区切り表現のための「_」を記述できる 4random_numbers = 5 Array.new(100, rand(1..1_000)) 6 7# NOTE: 一旦配列に収めて puts すると、要素ごとに改行が入って出力される 8puts [ 9 "最大値は: #{random_numbers.max}", 10 "最小値は: #{random_numbers.min}", 11 "合計値は: #{random_numbers.sum}" 12] 13 14# NOTE: do..end ブロックで処理を書くと close 記述が不要になる 15File.open('num_out.txt', 'w') do |f| 16 # NOTE: 他の処理で使わないので、「sorted_num」に代入せず、必要な場面でソート結果を使う 17 f.puts random_numbers.sort 18end

あくまで課題... なので「sorted_num に代入」といったことは守らないといけないかもしれませんが; 値を保持・操作する必要がなければ、代入する変数の数は少ないほど スッキリとしたコードを書くことができるような気がします

なにか参考になれば幸いです

Links

投稿2019/07/21 13:31

編集2019/07/21 13:34
gouf

総合スコア2321

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

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

0

配列にしまう というのが課題ですから、その点は bamboo-novaさんの回答を。

今回のエラーは

100.times do num=Random.rand(1..1000) puts num end sorted_num=num.sort

の最後の num が未定義だ、というエラーです。
2行めに有るじゃないか!?
と思うかも、ですが、この num は loopの中で初出しているので、loop内でしか参照できません。

投稿2019/07/21 12:17

winterboum

総合スコア23329

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

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

0

ベストアンサー

あくまで一例ですが、こんな形で大丈夫でしょうか。一行ずつ書き出したいときは、以下のようにすると良いと思います。

ruby

1res = Array.new 2100.times do 3 res.push(rand(101)) 4end 5sorted_num = res.sort 6 7puts"最小値は#{sorted_num.min}でした" 8puts"最大値は#{sorted_num.max}でした" 9puts"合計値は#{sorted_num.sum}でした" 10 11File.open("num_out.txt", mode = "w"){|f| 12 sorted_num.each do |h| 13 f.write("#{h}\n") # ファイルに書き込む 14 end 15}

投稿2019/07/21 10:48

bamboo-nova

総合スコア1408

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問