我想实现一个caesar密码移位,将字符串中的每个字母增加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);
}
}
}
是什么导致了这个错误?如何实现caesar密码移位以将字符串中的每个字母增加3?
5条答案
按热度按时间bweufnob1#
警告是由于您试图添加整数造成的(
int shift = 3
)一个字符值。您可以将数据类型更改为char
如果你想避免的话。一
char
是16位,一个int
是32岁。另外,您可以简化以下内容:
收件人:
mkh04yzy2#
java移位凯撒密码。
限制:
仅适用于shift参数中的正数。
仅在班次小于26时工作。
如果文本长度超过几千个字符,则a+=将使计算机陷入困境。
将数字转换为字符,因此除了ascii字母外,它将失败。
只允许字母a到z。无法处理空格、数字、符号或unicode。
代码违反了dry(不要重复你自己)的原则,重复计算的次数过多。
伪代码:
遍历字符串中的每个字符。
给字符加上shift,如果它落在字母表的末尾,则从字母表中的字母数中减去shift(26)
如果移位没有使字符从字母表的末尾脱落,则将移位添加到字符。
将字符附加到新字符串上。返回字符串。
功能:
如何调用它:
w8f9ii693#
你好…我已经在swing中为caesar cipher创建了一个java客户机服务器应用程序…我已经创建了一个可以正确解密文本的新公式。。。对不起,只有小写。。!
客户端类:
qltillow4#
实现凯撒密码的两种方法:
选项1:将字符更改为ascii数字,然后可以增加值,然后将其还原为新字符。
选项2:使用Map将每个字母Map到这样的数字。
有了Map,你不必每次都重新计算班次。然后您可以通过下面的Map将纯文本更改为加密文本。
wqsoz72f5#
下面的代码也处理大小写,并保留其他字符。