朱利叶斯凯撒加密

时间:2014-10-15 11:19:06

标签: java

Julius Caesar正在使用一个非常简单的编码系统,该系统包括用字母顺序排列几个等级的字母替换消息的每个字母。例如,对于4的移位,A变为E,B变为F,直到Z变为D.

我在java中编写了一个应用下述处理的程序。 但问题是我的代码更改空间 这些空间将保持不变。它们不是任何编码的对象,但会保持在它们的位置。

import java.util.Scanner;

public class Crypto {

    static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
    static final int DECALAGE = 4;

    static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("Veuillez entrer une chaine de caracteres : ");
        String s = scanner.nextLine();

        // la chaine a coder
        String aCoder = "";
        // la chaine codee
        String chaineCodee = "";
        int pos;

        aCoder = s;

        for(int i = 0; i < s.length(); i++) {
            if(s != ALPHABET) {
                System.out.println("La chaine a coder est vide.\n");
            }

            pos = ALPHABET.indexOf(s.charAt(i));
            int val = (pos+DECALAGE) % 26;
            char replace = ALPHABET.charAt(val);
            chaineCodee = chaineCodee+replace;

        }

        System.out.format("La chaine initiale etait : '%s'\n", s);

        if (aCoder.isEmpty()) {
            System.out.println("La chaine a coder est vide.\n");
        } else {
            System.out.format("La chaine a coder est : '%s'\n", aCoder);
            System.out.format("La chaine codee est : '%s'\n", chaineCodee);
        }
    }
}

你能帮我吗?

2 个答案:

答案 0 :(得分:0)

进行以下更改:

//add if
int val=(pos+DECALAGE)%26;
char replace=ALPHABET.charAt(val);
if (s.charAt(i) == ' ' ) {
   chaineCodee=chaineCodee+ ' ';
} else {
   chaineCodee=chaineCodee+replace;
}

答案 1 :(得分:0)

当您通过char加密输入字符时,您必须检查要从加密中排除的字符。此外,您可能希望使用StringBuilder来获得更好的性能:

final StringBuilder chaineCodee = new StringBuilder();

按如下方式更改循环:

for (int i = 0; i < s.length(); i++) {
    if (ALPHABET.indexOf(s.toLower().charAt(i)) == -1) {
        chaineCodee.append(s.charAt(i));  //no encryption, just copy the current character
        continue;
    }

    chaineCodee.append(ALPHABET.charAt((ALPHABET.indexOf(s.toLower().charAt(i)) + DECALAGE) % 26));
}