我有这个java练习:
1。 Captain Crunch解码器环工作 字符串中的每个字母,并添加13。例如,' a'变 ' N'和' b'变成了'。字母\环绕"最后,所以' z' 变成了' m。 编写一个接受String并返回新String的方法 包含编码版本。你应该假设String 包含大写和小写字母,以及空格,但没有其他字符 - tuation。小写字母应转换为其他小写字母 信;鞋面上部。你不应该编码空格。 2.概括船长Crunch方法,而不是添加13 对于字母,它添加任何给定的数量。现在你应该可以 通过添加13来编码事物并通过添加-13解码它们。试试吧。
对于第二部分,我试图概括该方法,以便它适用于任何正数字..如果我使用agiven数编码一个字符串,那么解码将通过添加(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));
}
&#13;
注意:据我所知,第一种方法仅适用于cod = 13 我使用的第二种方法适用于任何正数。
任何建议???
答案 0 :(得分:1)
您只能使用一个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;
}
答案 1 :(得分:0)
我认为当你进行概括时,不应该检查“s.charAt(i)&lt; ='m'”这个条件,你应该检查“s.charAt(i)&lt; =('a' + cod)“条件。我不确定但是试一试。希望这可以帮助。 (这是关于推广第一种方法。)