有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

字符串Java字母替换无效

我正在读一本关于密码学的书,我想写一个小程序来编码和解码一条信息是一个很酷的主意

我从一个简单的替换密码开始,它可以用一个不同的字母替换一个字母,移动一定数量。例如:a->;c、 b->;d、 等等,只是移动了2

我的代码似乎没有正确地替换字母。它总是输出与我输入的内容相同的内容,即使设置了键。这是我的密码:

public class Keyshift {

public static int Key = 0;

public static void selectKey(){
    Scanner in = new Scanner(System.in);
    System.out.println("Enter an integer");
    int a = in.nextInt();
    Key = Key + a;
}

public static void encode(){

    String input = "";
    Scanner in = new Scanner(System.in);
    System.out.println("Enter a string");
    input = in.nextLine();

    String[] inputLetters = input.split("");
    String[] output = new String[inputLetters.length];

    String dictLowercase = new String("abcdefghijklmnopqrstuvwxyz");
    String dictUppercase = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    String[] dictLowerArray = dictLowercase.split("");
    String[] dictUpperArray = dictUppercase.split("");


    for(int i=0;i<inputLetters.length;i++){
        for(int c=0;c<25;c++){
            if (inputLetters[i]==dictLowerArray[c]){
                output[i] = dictLowerArray[((c+Key) % 26)];
            }
            else if (inputLetters[i]==dictUpperArray[c]){
                output[i] = dictUpperArray[((c+Key) % 26)];
            }
            else {
                output[i] = inputLetters[i];
            }
        }
    }
    System.out.println("Your encoded message is: ");
    System.out.println(Arrays.toString(output));   
    //System.out.println(Key);
}
/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    selectKey();
    encode();
}

}

共 (2) 个答案

  1. # 1 楼答案

    首先,试着将Stringequals==进行比较。 此外,您没有指定任何break点,以防您发现某些内容已被修改。比如说,inputLetters的第一个字符与dictLowerArray的第一个字母匹配,现在迭代再次进入第二个循环,这一次只执行最后一个else块,并将与inputLetters中相同的值复制到output数组中

    试试这个循环:

    for(int i=0;i<inputLetters.length;i++){
            for(int c=0;c<25;c++){
                flag = false;
                if (inputLetters[i].equals(dictLowerArray[c])){
                    output[i] = dictLowerArray[((c+Key) % 26)];             
                    break;
                }
                else if (inputLetters[i].equals(dictUpperArray[c])){
                    output[i] = dictUpperArray[((c+Key) % 26)];
                    break;              
                }
                else {
                    flag = true;
                }
            }
            if (flag) {
                output[i] = inputLetters[i];
            }
        }
    
  2. # 2 楼答案

            String dictLowercase = new String("abcdefghijklmnopqrstuvwxyz");
            String dictUppercase = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
            char[] dictLowerArray = dictLowercase.toCharArray();//Use toCharArray
            char[] dictUpperArray = dictUppercase.toCharArray();
            char[] inputLetters = input.toCharArray();
            char[] output=new char[inputLetters.length];
            for(int i=0;i<inputLetters.length;i++){
                for(int c=0;c<25;c++){
                    if (inputLetters[i]==(dictLowerArray[c])){
                        output[i] = (char) (dictLowerArray[c]+Key % 26);//Logic Issue
                    }
                    else if (inputLetters[i]==(dictUpperArray[c])){
                        output[i] = (char) (dictUpperArray[c]+Key % 26);
                    }
                    else {
                          output[i] = inputLetters[i];//If not alphabets
                    }                
                }
              }
    
    • 为了方便起见,选择char操作而不是String
    • .toCharArray()代替split
    • 可以直接在字符上使用character+Key % 26