Caesar Cipher 没有打印最终数组

Caesar Cipher isn't printing final array

我正在尝试在 Java 中制作凯撒密码,它会询问您要移动哪个单词以及移动多少。我得到了一个越​​界异常,但那是固定的,它仍然无法正常工作

这是我的代码:

package cipher;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class mycipher {

public static void main(String[] args) {
    ArrayList<Character> finalpro = new ArrayList<Character>();
    ArrayList<Integer> modlet = new ArrayList<Integer>();
    Scanner consolereader= new Scanner(System.in);
    ArrayList<Character> letters = new ArrayList<Character>();
     char[] letters2 = {'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'};
     for(int i=0; i<letters2.length; i++){
         letters.add(letters2[i]);
     }
     System.out.println("what word would you like to cipher?");
     String original = consolereader.nextLine();
     System.out.println("how much would you like to shift it by");
     int shift = consolereader.nextInt();
     ArrayList<Character> userword = new ArrayList<Character>();
     for(int i=0; i<original.length();i++){
         userword.add(original.charAt(i));
     }
     for(int i=0; i<userword.size(); i++){
         if(userword.get(i)==letters2[i]){
             modlet.add(i%shift);
         }
     }
     for(int i=0;i<modlet.size(); i++){
         finalpro.add(letters2[modlet.get(i)]);
     }
     System.out.println(finalpro);

}

}

在:

for(int i=0; i<letters.size(); i++){
     if(userword.get(i)==letters2[i]){
         modlet.add(i%shift);
     }
 }

您正在遍历 letters.size(),它可能比 userword ArrayList 大。当您执行 userword.get(i) 时,索引将大于 userword.size(),因此会出现 outOfBoundsException。

您应该尝试更改字符的 ascii 码(对于小写字母):

for(Character charWord : userword){
    charWord = (char)(((((int) charWord - 97) + shift)%26) + 97);
}

这应该用移位 "shift" 的字符替换 userword 中的字符。

97 -> "a"

的 ascii 码

26 -> 字母表中的字母数。