使用数组解码Java中的句子

时间:2015-04-12 01:09:38

标签: java

所以我正在为即将到来的考试做一些练习问题,其中一个问题给我带来了一些挑战。

问题表明我们的代码应该采用已编码的字符串并对其进行解码。它必须如下工作:

每个字母都使用字母前面的字母解码(“b”变为“a”,“c”变为“b”等)。 “a”变为“z”。 每个数字的工作方式相同,8个变为7,5变为4。 0变为9。 字母和字母都没有变化。

我可以使用的唯一JAVA方法是IO

例如:

NFFU NF BU 23 JO UIF CFMM UPXFS
meet me at 12 in the bell tower

继承我当前的代码,我无法决定是否使用for循环。 TBH我不确定如何解决这个问题。

public class prb1 {
    public static void main(String[] args) {
        char letter[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        int num[]={0,1,2,3,4,5,6,7,8,9};

        System.out.println("Enter Message");
        String mssg=IO.readString();

        for(char i=0; i<letter.length; i++){
            System.out.print(letter[i]--);}

        for(int j=0; j<num.length; j++){
            System.out.print(num[j]--);             
        }       
    }
}

2 个答案:

答案 0 :(得分:0)

基本就是这样。但这还没有说明a =&gt; z转换。

    String cypher ="ABCDEF";
    String plain = "";
    for (char c : cypher.toCharArray())
        plain += (char) (c - 1);
    System.out.println(plain);

模数A =&gt; Z,它看起来像这样:

int A = 'A';
plain += (char) (((c - A - 1 + 26) % 26) + A);

需要+26因为java代表-1 % 26 == -1而不是25。

所以这只适用于A-Z,但您可以轻松修改它以适用于更广泛的范围。

答案 1 :(得分:0)

如果不是空格,aA,您可以使用循环迭代消息的每个字符并从其ascii代码中减去一个:

String message = "NFFU NF BU 23 JO UIF CFMM UPXFS";
String result = "";
for (char thisChar : message.toCharArray()) {
    if (thisChar == ' ') {
        result += " ";
    } else if(thisChar == 'a') {
        result += 'z';
    } else if (thisChar == 'A') {
        result += 'Z';
    } else
        result += (char)(thisChar - 1);
    }
}
System.out.println(result);

或者,您可以这样做:

String message = "NFFU NF BU 23 JO UIF CFMM UPXFS";
String result = "";
for (int i = 0; i < message.length(); i ++) {
    char thisChar = message.charAt(i);
    if (thisChar == ' ') {
        result += " ";
    } else if(thisChar == 'a') {
        result += 'z';
    } else if (thisChar == 'A') {
        result += 'Z';
    } else
        result += (char)(thisChar - 1);
    }
}
System.out.println(result);

从技术上讲,

    else if(thisChar == 'a') {
        result += 'z';
    } else if (thisChar == 'A') {
        result += 'Z';
    }

可缩短为:

    else if(thisChar == 'a' || thisChar == 'A') {
        result += (char)(thisChar + 25);
    }