Ceasar cipher java codin gproblem



我为凯撒密码创建了一个代码,班次是 25 个字符。我的代码没有编码字母表的前半部分,而是编码后半部分。我不知道为什么请帮忙。

例如,如果我尝试编码"abcdefghijklmnopqrstuvwxyz",它显示为"abcdefghijklmmlkjihgfedcba"。如您所见,只有字母表的后半部分被编码。我应该怎么做才能让它工作并编码后半部分?

import java.util.Scanner;
public class Project1 {
public static void main(String[] args) {        
//creating alphabet and coded alphabet arrays
char alphabet[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' '};
char codedAlphabet[] = {'z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a',' '};
//prompting user for encoding or decoding, and for the message
Scanner scan = new Scanner(System.in);
System.out.println("Enter the message: ");
String s = scan.nextLine();
s.toLowerCase();
StringBuffer message = new StringBuffer( s );
Scanner input = new Scanner(System.in);
System.out.println("Enter 1 to encode message, 2 to decode message: ");
int choice = input.nextInt();
if(choice == 1){
encode(message, alphabet, codedAlphabet);
System.out.println(message);
} else if(choice == 2) {
}
}
//method for encoding
public static void encode(StringBuffer message, char a[], char b[]){
for(int i = 0; i<message.length(); i++){
for(int j = 0; j<a.length; j++){
if( message.charAt(i) == a[j]){
message.setCharAt(i, b[j]);
}
}
}
}
}

您检查是否找到正确的字符是正确的。但是当你替换角色时,你必须打破这个内部循环。否则,如果所选的加密配对合适,则您还会多次替换相同的字符位置。在这种情况下,您将第一个字符a替换为z,这是正确的,但随后再次替换这个新字符z(回到a(,这是错误的。

public static void encode(StringBuffer message, char a[], char b[]){
for(int i = 0; i<message.length(); i++){
for(int j = 0; j<a.length; j++){
if( message.charAt(i) == a[j]){
message.setCharAt(i, b[j]);
// we found the character and replaced it, we
// are done with this position, get to the next "i"
break; 
}
}
}
}

根据您的问题代码,我认为这将是答案。

public static void encode(StringBuffer message, char a[], char b[]){
for(int i = 0; i<message.length(); i++){
for(int j = 0; j<a.length; j++){
if( message.charAt(i) == a[j]){
message.setCharAt(i, b[j]);
break;
}
}
}
}
public static void decode(StringBuffer message, char a[], char b[]){
for(int i = 0; i<message.length(); i++){
for(int j = 0; j<a.length; j++){
if(  message.charAt(i) == b[j]){
message.setCharAt(i, a[j]);
break;
}
}
}
}

最新更新