本文介绍了Java,如何实现移位密码(凯撒密码)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想实现一个 Caesar Cipher shift 以将字符串中的每个字母增加 3.
I want to implement a Caesar Cipher shift to increase each letter in a string by 3.
我收到此错误:
possible loss of precision required char; found int
这是我目前的代码:
import java.util.Scanner;
import java.io.*;
public class CaesarCipher
{
public static void main (String [] args) {
char[] letters = {'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'};
char[] message = "onceuponatime".toCharArray();
char[] eMessage = new char[message.length];
char shift = 3;
//encrypting message
for(int i = 0; i <= message.length; ++i)
{
eMessage[i] = (message[i] + shift) % (char) letters.length;
System.out.println(x);
}
}
}
是什么导致了这个错误?如何实现凯撒密码转换以将字符串中的每个字母增加 3?
What causes this error? How can I implement a caesar Cipher shift to increase each letter in a string by 3?
推荐答案
Java Shift Caesar Cipher by shift
空格.
限制:
- 仅适用于 shift 参数中的正数.
- 仅适用于小于 26 的班次.
- 执行 += 会使计算机陷入超过几千个字符的正文.
- 将数字转换为字符,因此除了 ascii 字母之外的任何字符都会失败.
- 只允许字母 a 到 z.无法处理空格、数字、符号或 unicode.
- 代码重复计算次数过多,违反了 DRY(不要重复自己)原则.
伪代码:
- 遍历字符串中的每个字符.
- 向字符添加移位,如果它落在字母表的末尾,则从字母表中的字母数中减去移位 (26)
- 如果移位没有使字符从字母表的末尾脱落,则向字符添加移位.
- 将字符附加到新字符串上.返回字符串.
功能:
String cipher(String msg, int shift){
String s = "";
int len = msg.length();
for(int x = 0; x < len; x++){
char c = (char)(msg.charAt(x) + shift);
if (c > 'z')
s += (char)(msg.charAt(x) - (26-shift));
else
s += (char)(msg.charAt(x) + shift);
}
return s;
}
如何调用它:
System.out.println(cipher("abc", 3)); //prints def
System.out.println(cipher("xyz", 3)); //prints abc
这篇关于Java,如何实现移位密码(凯撒密码)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!