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

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

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

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

1回答

718閲覧

bcdaにしたいです。

tatatatatatatat

総合スコア1

char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2021/07/03 12:48

編集2021/07/03 13:21

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
processingで暗号化システムを作っています。
暗号化 機能を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージ StringIndexOutOfBoundsException : String index out of range: 4

該当のソースコード

ソースコード String encrypt(String message, int ekey) { String alphabet="abcdefghijklmnopqrstuvwxyz"; String encrypted = ""; for (int i=0; i < message.length(); i++) { char ch = message.charAt(i); int pos = alphabet.indexOf(ch); if (pos == -1) { encrypted = encrypted + ch; } else { ch = message.charAt(pos + ekey); encrypted = encrypted + ch; System.out.println(encrypted); } } return encrypted; } void setup() { size(100, 100); String text="abcd"; String etext = encrypt(text, 2);//String etext = encrypt(text, 0); println(etext); }

試したこと

ここに問題に対して試したことを記載してください。
System.out.println(encrypted);で確認しましたが、aの文字が消えていて何がどうなっているのか分かりません。

char ch = message.charAt(i);//1文字ずつ取ってくる。
int pos = alphabet.indexOf(ch);//posにchを代入して値を返す。
if(pos == -1)//判定なし。
else//判定あり
ch = message.charAt(pos + ekey);//()は"0(a)" + "2"
encrypted = encrypted + ch;//chをencryptedに代入。
String etext = encrypt(text, 2);//textの2文字目から始める。

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

processing3
バージョン3.5.4
ここにより詳細な情報を記載してください。
先程までエラーが起きず実行できていたのですが、何か消したか、追加したかでエラーが起きたんだと思います。
bcdaにするにはどう加えたらいいでしょうか。

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

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

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

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

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

thkana

2021/07/03 13:01

なんだか https://teratail.com/questions/347179 と同じ方の質問のような気がしてならないのですが、どうなのでしょう? とりあえず > 略:aがどっかに行っちゃいましたエラー のようなことはしないで「そのまま」掲載してください。 > aをdの後ろに返す 意味不明です。
thkana

2021/07/03 13:58

> 同じ方の質問のような気がしてならないのですが、どうなのでしょう? どうなのでしょう? 変数encryptedの内容がbcdaになることは暗号化には全く寄与しませんが、暗号化に関係なくそうなれば期待通りということなのですか?
tatatatatatatat

2021/07/03 14:02

違います。 今日、このサイトを紹介してもらいました。 そうなれば期待通りです。
guest

回答1

0

追記・修正依頼で確認した上で質問者がどうしてもということなので、

encrypt関数の引数に"abcd"を与えた時にencrypted変数が"bcda"になるようにするために
ch = message.charAt(pos + ekey);
の行を
ch = message.charAt((pos + 1)%4);
と変更することを提案します。

投稿2021/07/03 14:18

thkana

総合スコア7703

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問