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

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

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

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

Q&A

解決済

1回答

169閲覧

rubyのエラー どこを直せばいいのでしょうか

macg3n

総合スコア60

Ruby

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

0グッド

0クリップ

投稿2017/11/02 11:50

シーザー暗号を使った暗号の解読コードを書こうとしています。
一番多い文字をeと対応していると考えて以下のように書きました。
ずらすのは英小文字だけです。

ruby

1 2def dec(angobun) 3 code_a = 'a'.ord # 文字 a の文字コード(=97) 4 kosu = 26 # 英字アルファベットの数 5 len = angobun.length # 文字列の長さ 6 ango = angobun.unpack("C*") # 文字列から文字コードの配列へ変換 7 hira = Array.new(len) # ひら文(のコード)格納用配列 8 time = Array.new(kosu,0) #文字が何個ずつあるか用配列 9 for i in 0..len-1 10 code = ango[i] # i 文字目のコードを得る 11 sa = code-code_a # 文字 a からの差分 12 if 0<=sa && sa<kosu #英小文字を数える 13 time[sa]+=1 14 end 15 end 16 max=time.max 17 key=max-4 #一番多いのとeとのズレが鍵とする 18 19 for i in 0..len-1 #復号してく 20 code = ango[i] 21 sa = code-code_a 22 if 0<=sa && sa<kosu #英小文字ならsaを0〜25の間にする 23 sa-=key 24 while sa>=kosu 25 sa-=kosu 26 end 27 while sa<0 28 sa+=kosu 29 end 30 hira[i] = sa + code_a # 暗号文用のコードの格納 31 end 32 end 33 hirabun = hira.pack("C*") # コードの配列を文字列に直す (<- 35行め) 34 return(hirabun) 35end 36 37 38angobun = gets.chomp # 平文を入力 39hirabun = dec(angobun) # 暗号文に変換   (<- 41行め) 40puts(hirabun) # 暗号文を出力 41

エラー

kaidoku.rb:35:in pack': no implicit conversion of nil into Integer (TypeError) from kaidoku.rb:35:in dec'
from kaidoku.rb:41:in `<main>'

どうすれば良いのでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

if 0<=sa && sa<kosu #英小文字ならsaを0〜25の間にする

で、小文字で無いときの処理が何も無いからその部分のhira[i]nilになってしまいます。

他にもおかしいところがあります。

投稿2017/11/02 14:28

otn

総合スコア84423

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

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

macg3n

2017/11/02 15:37

エラーは無くなりました! 他のとこも直していきます ありがとうございました!
macg3n

2017/11/02 15:37

エラーは無くなりました! 他のとこも直していきます ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問