String source = "WEDGEZ"
char letter = source.charAt(i);
shift=5;
for (int i=0;i<source.length();i++){
if (source.charAt(i) >=65 && source.charAt(i) <=90 )
letterMix =(char)(('D' + (letter - 'D' + shift) % 26));
}
好的我正在尝试的是取字符串WEDGEZ,并将每个字母移动5,因此W变为B而E变为J等。但是我觉得我使用的数字有些不一致。
对于if语句,我正在使用ASCII值,并且用于
letterMix= statement
,我正在使用1-26中的数字(我认为)。实际上,问题也是如此:
是什么
(char)(('D' + (letter - 'D' + shift) % 26));
还是会回来的吗?它返回一个char权限,但是从int转换。我在网上发现了这个声明,我完全不是自己写的,所以这个声明究竟是什么回归。
这段代码的一般问题是,对于W,它返回'/',对于Z,它返回_,我猜这意味着它使用的是ASCII值。我真的不知道如何处理这个问题。
编辑:新代码
for (int i=0;i<source.length();i++)
{
char letter = source.charAt(i);
letterMix=source.charAt(i);
if (source.charAt(i) >=65 && source.charAt(i) <=90 ){
letterMix=(char)('A' + ( ( (letter - 'A') + input ) % 26));
}
}
答案 0 :(得分:4)
嗯,我不确定这个作业是否合适,所以我会对代码感到吝啬。
你正在写一个移位为5的Caesar Cipher。
解决您的Z
- &gt; _
问题...我假设您希望将所有字母更改为编码字母(而不是奇怪的符号)。问题是A-Z
的ASCII值介于65和90之间。
在编码Z
时(例如),你最终会向它添加5,这给你的值为95(_
)。
您需要做的是绕过可用的字母表。首先隔离,字符在字母表中的相对位置(即A = 0,B = 1 ......)你需要减去65(这是A
的ASCII。添加你的Shift
然后应用modulus 26
。这将导致你的价值回归。
例如,它是您的编码Z
,(ASCII = 90),因此相对位置是25(= 90 - 65)。
现在,25 + 5 = 30,但你需要的值在26以内。所以你需要modulus 26
所以30 % 26
是4
,E
。
所以这是
char letter = message(i);
int relativePosition = letter - 'A'; // 0-25
int encode = (relativePosition + shift) % 26
char encodedChar = encode + 'A' // convert it back to ASCII.
所以在一行中,
char encodedChar = 'A' + ( ( (letter - 'A') + shift ) % 26)
注意,这仅适用于大写,如果您计划使用小写,则需要一些额外的处理。
您可以使用Character.isUpperCase()
来检查大写字母。
答案 1 :(得分:0)
Ascii类{
public static void main(String [] args){
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
Error from server (NotFound): pods "deployment-6sj54" not found
}