我必须实现一个名为 encodeCaesar
在班上 Functionality.java
,它使用caesar加密对文本进行编码,我对java完全是个新手。
签名: encodeCaesar(String s, int val) : String
该方法获取一个字符串值和一个整数值作为输入参数。字符串值中的字母(字符)将被整数值移位。为了简单起见,我可以假设只有字母,没有空格、数字或特殊字符。
在执行加密之前,应将字符串值转换为小写。该方法应返回一个字符串,其中每个字母都已根据指定的整数值移动。
例子: encodeCaesar("Ac",3)
退货 "df"
. 如果给定的整数值小于0或大于26,则应返回空字符串。
public class Functionality {
public static void main(String[] args) {
}
public static String encodeCaesar(String s, int val) {
char[] newString = s.toCharArray();
for (int i = 0; i < s.length(); i++) {
int newChar = newString[i] + val + 26;
// Handle uppercase letters
while (Character.isUpperCase(newString[i]) && newChar >= 65 + 26) {
newChar -= 26;
}
// Handle lowecase letters
while (Character.isLowerCase(newString[i]) && newChar >= 97 + 26) {
newChar -= 26;
}
newString[i] = (char) (newChar);
}
return String.valueOf(newString);
}
}
我的问题是,作为回报,它只给了我真假。如何解决这个问题:该方法应该返回一个字符串,其中每个字符都按照指定的整数值进行了移动。
3条答案
按热度按时间qacovj5a1#
以下代码片段解决了一些小问题:
密码保持非字母字符(如果有)不变
while
循环替换为if
使用模运算符将值覆盖z
```public static String encodeCaesar(String s, int val) {
char[] newString = s.toLowerCase().toCharArray();
for (int i = 0; i < newString.length; i++) {
char newChar = newString[i];
}
System.out.println("encode: " + encodeCaesar("Viva Caesar! Morituri te salutant!", 3));
System.out.println("caesar: " + caesar("Viva Caesar! Morituri te salutant!", 3));
encode: ylyd fdhvdu! prulwxul wh vdoxwdqw!
caesar: ylyd=fdhvdu>=prulwxul=wh=vdoxwdqw>
ctzwtxfj2#
我解决了这个问题。
cygmwpex3#
你可以用
String.codePoints
方法进行迭代int
此字符串的字符值,并按给定值移动它们:另请参见:替换字符串中的非ascii字符