私は現在、ファイルを入力として受け取り、ユーザーに番号を要求することでシーザー暗号を作成するプロジェクトに取り組んでいます。数字は文字を前方にシフトするために使用されるため、入力された数字が 2 の場合、a は c になります。アルファベットはラップアラウンドし (つまり、文字が z で入力が 2 の場合、暗号化された文字は b になります)、プログラムは文字以外の文字を無視して単純に先に進みます。
私はうまくいくと信じている解決策を持っていますが、出力が私が期待したものでも、本来あるべきものでもないため、何かが欠けていると思います。以下のコードの関連セクションを含めました
public static String encode(String content, int num){
char[] contentArray = content.toCharArray();
String encoded = "";
for(int i = 0; i < contentArray.length; i++){
char current = contentArray[i];
if (current >= 'a' && current <='z' || current >= 'A' && current <= 'Z'){
current = (char) (current + num);
if (current > 'z' | current > 'Z'){
current = (char) (current - 26);
} else if (current < 'a' | current < 'A'){
current = (char) (current + 26);
}
contentArray[i] = current;
encoded = encoded + encoded.concat(Character.toString(contentArray[i]));
} else {
i++;
}
}
return encoded;
}
上記のメイン関数は、この関数を呼び出す前にユーザーに必要な入力を求めるだけです。この場合、文字列の内容は次の文字で構成されます: taco cat 1-349z 2
理論的には、ユーザーが数値として 2 を入力した場合、これは vceq ecv 1-349b 2 を返すはずです。残念ながら、それは次を返します...
\I\IK\I\IKW\I\IK\I\IKWI\I\IK\I\IKW\I\IK\I\IKWI\\I\IK\I\IKW\I\IK\I\IKWI\ I\IK\I\IKW\I\IK\I\IKWI\b
...これは明らかに正しくありません。私のコードで何が問題になっているのかわからないので、どんな支援も大歓迎です。ありがとうございました!