【发布时间】:2016-08-31 06:51:26
【问题描述】:
我有这个 java 练习:
1.紧缩船长解码器环的工作原理是 字符串中的每个字母并在其上加 13。例如,“a”变成 'n' 和 'b' 变成 'o'。字母 \wrap around" 在最后,所以 'z' 变成'm'。 编写一个接受 String 并返回新 String 的方法 包含编码版本。你应该假设字符串 包含大小写字母和空格,但没有其他标点符号 学费。小写字母应转换为其他小写字母 信件;上到上。您不应该对空格进行编码。 2.推广Captain Crunch方法,而不是添加13 对于字母,它会添加任何给定的数量。现在你应该能够 通过添加 13 对事物进行编码并通过添加 -13 对其进行解码。试试看。
对于第二部分,我试图概括该方法,使其适用于任何 正 数字。如果我使用给定数字编码字符串,则解码将通过添加 (26 - number) 。 .. 我的问题在于它要求添加 -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 我制作的第二种方法适用于任何正数。
有什么建议吗???
【问题讨论】: