gpt4 book ai didi

java - 破译队长紧缩代码?

转载 作者:行者123 更新时间:2023-12-01 09:33:01 25 4
gpt4 key购买 nike

我有这个java练习:

1。 Captain Crunch 解码环的工作原理是字符串中的每个字母加上 13。例如,“a”变为“n”和“b”变成“o”。字母\wrap around"最后,所以 'z'变成“m”。编写一个接受 String 并返回新 String 的方法包含编码版本。你应该假设字符串包含大小写字母和空格,但没有其他标点符号学费。小写字母应转换为其他小写字母信件;上层进入上层。您不应该对空格进行编码。2.推广Captain Crunch方法,而不是添加13它会在字母上添加任何给定的金额。现在你应该能够通过添加 13 来编码,并通过添加 -13 来解码。尝试一下。

对于第二部分,我尝试概括该方法,以便它适用于任何数字。如果我使用给定数字对字符串进行编码,则将通过添加 (26 - 数字) 来进行解码。 .. 我的问题是它要求添加 -13 来解码的部分,这对我不起作用::

public static String captainCrunch(String s, int cod){
int i = 0;
char hat = ' ';
String r = "";

while(i < s.length()){
if(s.charAt(i) >= 'a' && s.charAt(i) <= 'm'){
hat = (char)(s.charAt(i) + cod);
}else if(s.charAt(i) >= 'n' && s.charAt(i) <= 'z'){
hat = (char)(s.charAt(i) - cod);
}else if(s.charAt(i) >= 'A' && s.charAt(i) <= 'M'){
hat = (char)(s.charAt(i) + cod);
}else if(s.charAt(i) >= 'N' && s.charAt(i) <= 'Z'){
hat = (char)(s.charAt(i) - cod);
}else if(s.charAt(i) == ' '){
hat = ' ';
}
r = r + hat;
i++;
}
return r;
}

public static String Decoder(String s ,int cod){
int i = 0;
char hat = ' ';
String r = "";
if(cod >= 26){
cod = cod%26;
}

while(i < s.length()){
if(s.charAt(i) >= 'a' && s.charAt(i) <= 'm'){
hat = (char)(s.charAt(i) + cod);

if(s.charAt(i) != 'a' && (s.charAt(i) + cod) > 'z'){
hat = (char)('a' + (s.charAt(i) + cod - 'z') - 1);
}
}else if(s.charAt(i) >= 'n' && s.charAt(i) <= 'z'){
hat = (char)(s.charAt(i) + cod);

if((s.charAt(i) + cod) > 'z'){
hat = (char)('a' + (cod - 1) -('z' - s.charAt(i)));
}
}else if(s.charAt(i) >= 'A' && s.charAt(i) <= 'M'){
hat = (char)(s.charAt(i) + cod);

if(s.charAt(i) != 'A' && (s.charAt(i) + cod) > 'Z'){
hat = (char)('A' + (s.charAt(i) + cod - 'Z') - 1);
}
}else if(s.charAt(i) >= 'N' && s.charAt(i) <= 'Z'){
hat = (char)(s.charAt(i) + cod);
if((s.charAt(i) + cod) > 'Z'){
hat = (char)('A' + (cod - 1) -('Z' - s.charAt(i)));
}
}else if(s.charAt(i) == ' '){
hat = ' ';
}
r = r + hat;
i++;
}
return r;
}
public static void main(String[] args){
System.out.println(Decoder("Hello World", 12));
System.out.println(Decoder("Hello World", 14));
System.out.println(captainCrunch("Hello World", 13));
System.out.println(Decoder("Hello World", 13));
System.out.println(captainCrunch("Uryyb Jbeyq", 13));
System.out.println(captainCrunch("Uryyb Jbeyq", -13));
}

注意:据我所知,第一种方法仅适用于 cod = 13 我制作的第二种方法适用于任何正数。

有什么建议吗???

最佳答案

您可以仅使用一个函数 encodeDecode 来完成此操作,如下所示:

/* encodeOrDecode = 0 for encode
** encodeOrDecode = 1 for decode
*/
public static String encodeDecode(int encodeOrDecode, String s, int code) {

String result = "";

if (encodeOrDecode == 1) {
code *= -1;
}

for (int i = 0; i < s.length(); i++) {

char ch = s.charAt(i);

if (Character.isUpperCase(ch)) {
ch += code;
if (ch > 'Z') {
ch -= 26;
} else if (ch < 'A') {
ch += 26;
}
} else if (Character.isLowerCase(ch)) {
ch += code;
if (ch > 'z') {
ch -= 26;
} else if (ch < 'a') {
ch += 26;
}
}
result += ch;
}
return result;
}

关于java - 破译队长紧缩代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39242632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com