Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaというか文字列について少し質問です><)

Java文字列のシーザー暗号の越える問題について

このQ&Aのポイント
  • Javaでシーザー暗号を使う際にアルファベットのループ処理の問題が発生します。
  • アルファベットの小文字26文字のみを対象としている場合、暗号化や復号化の際に越えてしまうときにどうすればよいか悩んでいます。
  • 現在の方法ではzから引いたものを使ってループさせますが、うまく機能しません。他にいい方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ketuago65
  • ベストアンサー率50% (13/26)
回答No.1

こう何回も同じ人に答えられると逆にうざったいと思いますが、ちょっと思いついたのでよかったら参考にしてください(笑) 10進数で計算しているのでaが97、zが122で処理をしています。 まず、zよりも大きくなった時は、zとの差を計算し、越えた分だけ96に足すとうまくaからスタートします。(小文字が97から始まるため) 次にaよりもcの値が小さくなってしまった場合ですが、この場合はzから数えるのでしょうか?それともaから数えるのでしょうか? どっちか分からなかったため、両方考えてみました。 zから数える場合、aよりどれくらい小さいのかを計算し、zから戻っていくので123から弾いていきます。 aから数える場合は96に足していくことでaから数えていくことができます。 ちょっと説明が下手なのでうまく伝わるか分かりませんが、質問主様のお役に立てれば幸いです。 ソースは以下のようになります。 for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c-key); if(c >122) c = (char)((c - 122) + 96);//zを超えていたらzとの差を計算し、最初から数えなおす。 else if(c < 97) c = (char)(123 - (97 - c)); //aよりも小さく、かつzから数える場合 //else if(c < 97) c = (char)((97 - c)+96); //aよりも小さく、かつaから数える場合 sb.append( c ); }

u_f_o_pech
質問者

お礼

なんどもありがとうございました。 全体的にはすぐできたのにこういう細部で苦戦してしまいました。 ホントにありがとうございました><

すると、全ての回答が全文表示されます。

関連するQ&A