Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何包括_&引用;凯撒密码_Java_Caesar Cipher - Fatal编程技术网

Java 如何包括_&引用;凯撒密码

Java 如何包括_&引用;凯撒密码,java,caesar-cipher,Java,Caesar Cipher,我有一个用于java的ceaser密码,它工作得很好,但我试图解码的消息中有空格。它们落在z之后,当移动1时,应为“A”。我该如何将其添加到代码中?我试着用“替换“z”,以为这会很简单,但随后它将“更改为”` import java.util.*; 公共类密码程序{ 公共静态void main(字符串参数[]){ 扫描仪sc=新的扫描仪(System.in); System.out.println(“输入密文消息:”); 字符串密文=sc.nextLine(); System.out.print

我有一个用于java的ceaser密码,它工作得很好,但我试图解码的消息中有空格。它们落在z之后,当移动1时,应为“A”。我该如何将其添加到代码中?我试着用
替换“z”,以为这会很简单,但随后它将
更改为
”`

import java.util.*;
公共类密码程序{
公共静态void main(字符串参数[]){
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入密文消息:”);
字符串密文=sc.nextLine();
System.out.println(“输入移位值:”);
int shift=sc.nextInt();
字符串消息=”;
for(int i=0;i如果(alphabet>='a'&&alphabet='a'&&alphabet您这样重新编写您的逻辑:

private static final String KEY = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String shift(String input, int amount) {
    final int keyLen = KEY.length();
    final int shift = (amount % keyLen + keyLen) % keyLen;
    char[] buf = input.toCharArray();
    for (int i = 0; i < buf.length; i++) {
        int idx = KEY.indexOf(buf[i]);
        if (idx != -1)
            buf[i] = KEY.charAt((idx + shift) % keyLen);
    }
    return new String(buf);
}
输出

Gdkkn Vnqkc
你好,世界
Ifmmp Xpsme
Jgnnq-Yqtnf
霍尔兹罗格
卢鲁格
你好,世界
你好,世界
“它们落在z之后,当移位1时,应为“A”但是
z
目前并没有转换成
A
,而是转换成
A
,而正是
z
转换成
A
。因此,在您尝试添加
之前,您如何让转换使用完整的52个字母移位周期,而不是两个独立的26个字母移位周期?
private static final String KEY = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String shift(String input, int amount) {
    final int keyLen = KEY.length();
    final int shift = (amount % keyLen + keyLen) % keyLen;
    char[] buf = input.toCharArray();
    for (int i = 0; i < buf.length; i++) {
        int idx = KEY.indexOf(buf[i]);
        if (idx != -1)
            buf[i] = KEY.charAt((idx + shift) % keyLen);
    }
    return new String(buf);
}
System.out.println(shift("Hello World", -1));
System.out.println(shift("Hello World", 0));
System.out.println(shift("Hello World", 1));
System.out.println(shift("Hello World", 2));
System.out.println(shift("Hello World", 3));
System.out.println(shift("Hello World", 30));
System.out.println(shift(shift("Hello World", 30), -30));
System.out.println(shift(shift("Hello World", 30), 23));