这种方法究竟有用吗?这是一种改变角色的方法。我不明白你如何使用'a'从c中减去。它全部保存为数字吗?在这种情况下%= 26会做什么?
private char shift(char c)
{
int letter = c-'a';
letter+= shift;
letter %=26;
return (char) ('a'+ letter);
}
答案 0 :(得分:0)
char是Java中的两字节无符号整数。 'c'
是一种更易读的方式(在处理字符时)99,因为字符'c'
的Unicode值是99。
因此,如果您的c变量是字符'c'
,则其值为99. 'a'
的值为97,'c' - 'a'
等于2.
答案 1 :(得分:0)
char
在技术上是一种数字类型 - 它使用字符的Unicode代码点作为其数据值。从' c'中减去'a'
会给出' c'在字母表中。 %=26
将字母设置为除以26时出现的余数。基本上,此方法使用凯撒密码将每个字母移位shift
个位置。
答案 2 :(得分:0)
使用c-'a'时,表示从符号“c”中减去符号“a”的ASCII码编号。 http://www.asciitable.com/ 你可以看到每个符号都有自己的ascii数字。从例子 ASCII的“c”= 99 ASCII的“a”= 97 所以c-a = 2。
答案 3 :(得分:0)
C和Java中的字符可以作为非常短的数字处理。但它被视为一个字符,它编码一个ASCII字符。
letter %=26;
只是
的简短表达letter = letter % 26;
%是模运算,并通过参数除法返回提醒。
您的代码执行以下操作
private char shift(char c) {
int letter = c-'a'; // calculate distance to 'a'
letter+= shift; // add some distance
letter %=26; // handle overflow - if shifted behind 'z'
return (char) ('a'+ letter); // apply calculated distance to 'a' to get output
// and cast it to type char.
}
似乎是Cesar chiffre的实现。