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);
}
}
}
你能帮我吗?
答案 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));
}