【问题标题】:decode a captain crunch code?解码船长紧缩密码?
【发布时间】: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 我制作的第二种方法适用于任何正数。

有什么建议吗???

【问题讨论】:

    标签: java string methods


    【解决方案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;
    }
    

    【讨论】:

      【解决方案2】:

      我认为当你进行概括时,而不是检查“s.charAt(i)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-02
        • 1970-01-01
        • 1970-01-01
        • 2016-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多