解码船长紧缩代码?

时间:2016-08-31 06:51:27

标签: java string methods

我有这个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;
&#13;
&#13;

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

任何建议???

2 个答案:

答案 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)“条件。我不确定但是试一试。希望这可以帮助。 (这是关于推广第一种方法。)