0

私は現在、ファイルを入力として受け取り、ユーザーに番号を要求することでシーザー暗号を作成するプロジェクトに取り組んでいます。数字は文字を前方にシフトするために使用されるため、入力された数字が 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

...これは明らかに正しくありません。私のコードで何が問題になっているのかわからないので、どんな支援も大歓迎です。ありがとうございました!

4

1 に答える 1

0

これを試して

public static String encode(String enc, int offset) {
        offset = offset % 26 + 26;
        StringBuilder encoded = new StringBuilder();
        for (char i : enc.toCharArray()) {
            if (Character.isLetter(i)) {
                if (Character.isUpperCase(i)) {
                    encoded.append((char) ('A' + (i - 'A' + offset) % 26));
                } else {
                    encoded.append((char) ('a' + (i - 'a' + offset) % 26));
                }
            } else {
                encoded.append(i);
            }
        }
        return encoded.toString();
    }

使用法

 System.out.println(encode("taco cat 1-349z", 2));
于 2015-02-27T03:10:12.473 に答える