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 -> 字母表中的字母数。
我正在尝试在 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 -> 字母表中的字母数。