尝试在java中实现caesar密码

尝试在java中实现caesar密码,java,algorithm,caesar-cipher,Java,Algorithm,Caesar Cipher,我试图在java中实现caesar密码加密,但如果必须进行旋转(例如key=2,文本为“zz”),则输出错误,输出应为“bb”。我不知道下面的代码哪里错了 import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { public static void main(String[] args)

我试图在java中实现caesar密码加密,但如果必须进行旋转(例如key=2,文本为“zz”),则输出错误,输出应为“bb”。我不知道下面的代码哪里错了

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();// length of the string
        String s = in.next();// The string to be encrypted using caesar cipher
        int k = in.nextInt();// The key k
        int key;
        for(int i =0;i<n;i++){
            int ascii = (int)s.charAt(i);
            if(s.charAt(i)=='-'){
                System.out.print('-');
                continue;
            }
            if(ascii >= 65 && ascii <=90){
                if(k+ascii > 90){
                    k=k%26;
                    if(k==0){
                        k+=1;
                    }

                    ascii=64+k;
                }
                else{
                    ascii=ascii+k;
                }
            }
            if(ascii >= 97 && ascii <=122){
                if(k+ascii > 122){
                    k=k%26;
                     if(k==0){
                        k+=1;
                    }

                    ascii=96+k;
                }
                else{
                    ascii=ascii+k;
                }
            }
            char c=(char)ascii;
            System.out.print(c);
        }
    }
}
import java.io.*;
导入java.util.*;
导入java.text.*;
导入java.math.*;
导入java.util.regex.*;
公共类解决方案{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int n=in.nextInt();//字符串的长度
字符串s=in.next();//要使用caesar密码加密的字符串
int k=in.nextInt();//键k
int键;
对于(int i=0;i=65&&ascii 90){
k=k%26;
如果(k==0){
k+=1;
}
ascii=64+k;
}
否则{
ascii=ascii+k;
}
}
如果(ascii>=97&&ascii 122){
k=k%26;
如果(k==0){
k+=1;
}
ascii=96+k;
}
否则{
ascii=ascii+k;
}
}
字符c=(字符)ascii;
系统输出打印(c);
}
}
}

您的模计算错误。应该是:

k = k % 26; // not 26%k as you currently have
或者,更优雅地说:

k %= 26;

你的模计算是错误的。应该是:

k = k % 26; // not 26%k as you currently have
或者,更优雅地说:

k %= 26;

感谢您指出,但在某些情况下,此代码仍然不起作用。感谢您指出,但在某些情况下,此代码仍然不起作用。感谢您像一个魔咒一样工作,想到同样的事情,但有点困惑。感谢您像一个魔咒一样工作,想到同样的事情,但有点困惑。