引き続きトライ。
好きな数だけ単語の入力をしてもらい(1行に1単語と入力が続き 最後は空行でEnterのみとする)それをアルファベット順に並び替えて出力するようなプログラムを書いてみましょう。
空行でEnterを押した時つねにプログラムが終了するかなどのテストもおこないましょうね。
配列あたりからコードの順番や優先度がとんちんかんになっていて、いただいたご助言とても参考になります大感謝です。
- まず大枠をとらえて(好きな数をユーザの入力がある間はそれを繰り返し、Enterになればalphabet順に出力)
- 行間やその仕様の意図する文脈を感覚的にわかるのも大事。下でもらったご教示の通り
- ループとイテレータの相違とか
- いくつかの材料をどの順で書くといいのかとか
- 『結果としてこうなる』ように意識してその順にコードを書くことなど
コードに触れて読み真似ながら習得するのが早道なのだということ。
このプログラムを自分で書くなら以下の順番で書きます 1. p gets というコードで Enter, foobar などを入力してみる 2. "\n" が入ることがわかるが、これが邪魔なので gets.chomp にする 3. p gets.chomp をループの中に入れる (loop do / end や while true / end) など 4. word = gets.chomp と代入するようにする 5. word が空文字かどうかを調べてループを抜けられるようにする 6. word が空文字じゃないときの処理を書けるように if を書く
- foobarとは→foobar
- 同義語:hoge, ホニャララ
い
空文字(Enter)になったらループを抜けて終わるプログラムができた。
alphabets=[ ] word =gets.chomp until word =='' word = gets.chomp puts word end
moomin:programmingRuby tomomi$ ruby array.rb foobar honyararara honyararara hoge hoge foo and bar foo and bar moomin:programmingRuby tomomi$
ろ
いのつづき。
うううううう何をどうしたいんだ。咀嚼吸収力が足らない。
alphabets=[] word =gets.chomp while word !='' word = gets.chomp if word.length ==0 word = strings #いやちがうだろう puts strings else word.length!=0 #ん? end end puts word.sort
moomin:programmingRuby tomomi$ ruby array.rb hello domo arararara array.rb:7: undefined local variable or method `strings' for main:Object (NameError)
to be continued..