我正在编写Caesar Cypher程序,但我无法弄清楚如何在我的char数组中存储空间。这是我的加密方法
public static String encrypt(String msg, int shift) {
char[] list = msg.toCharArray();
for (int i = 0; i < list.length; i++) {
// Shift letter
char letter = list[i];
letter = (char) (letter + shift);
if (letter > 'z') {
letter = (char) (letter - 26);
}
else if (letter < 'a') {
letter = (char) (letter + 26);
}
else if (letter == ' ') {
letter = '\0';
}
list[i] = letter;
}
// Return final string.
return new String(list);
}
答案 0 :(得分:3)
从字面上看,你问题的答案是:
list[i] = ' ';
但是,您编写的代码看起来相当破碎。提示:仔细考虑:
a
到z
范围内不是字母的字符会发生什么情况(小写!),
此测试之前letter
会发生什么 - if (letter == ' ') { ...
。
答案 1 :(得分:1)
空格是一个类似于任何其他字母的字符:
char space[] = {' '};
或
myCharArray[i] = ' ';
答案 2 :(得分:0)
用于存储空格的ascii代码,然后将其与字符进行比较。此链接可能会帮助您
http://www.theasciicode.com.ar/ascii-printable-characters/space-ascii-code-32.html
答案 3 :(得分:0)
您有一个逻辑错误 - 您只应在应用班次后将字母与空格字符进行比较。你应该检查一下这个字符是否是一个空格,然后如果它是你要移动的字符之一(可能只是字母和数字),则只移动它。
修复后,您可以以与检查方式相同的方式存储它:
if ( letter == ' '){
letter = ' ';
} else {
//logic for shifting
}
虽然真的没必要。
更合适if ( letter != ' '){
//logic for shifting
}
真的非常,更合适的是:
if(shouldShift(letter)){
//logic for shifting
}
shouldShift
类似于:
public boolean shouldShift(char letter){
return Character.isLetter(letter) || Character.isDigit(letter);
}