所以我正在为即将到来的考试做一些练习问题,其中一个问题给我带来了一些挑战。
问题表明我们的代码应该采用已编码的字符串并对其进行解码。它必须如下工作:
每个字母都使用字母前面的字母解码(“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]--);
}
}
}
答案 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)
如果不是空格,a
或A
,您可以使用循环迭代消息的每个字符并从其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);
}