我一直在尝试创建一个程序,但由于导致Null
输出的错误,我正在努力。
- 问题陈述:您必须完成一项秘密任务,您必须打破敌人的代码。你已经弄清楚了 他们使用以下方法编码消息。每封信之间 'a'和'z',包括在内,被分配一个不同的两位数字 介于01和26之间。通过简单替换来编码消息 每个字母及其分配的编号。例如,如果指定了“t” 20,'e'分配05,'s'分配19,然后消息“test” 被编码为“20051920”。所有原始邮件仅包含小写 字母。给定字母和编码的数字 消息,你需要找出原始消息。
- 输入:第一行将包含一个整数T =测试用例数。每个测试用例将包含两行。第一行将包含 包含数字赋值的26个字符的字符串 字母。该字符串的第一个字母分配为01,第二个字母为 分配02等等。下一行将包含编码消息。
- 输出:对于每个测试用例,请解码并打印原始邮件。
代码
public class SecretCode { public static void main(String args []){ Scanner sc = new Scanner(System.in); int temp = sc.nextInt();
for (int l = 0; l < temp; l++) {
String code = sc.next();
Hashtable ht = new Hashtable();
int i = 1;
for (int k = 0; k < code.length(); k++) {
if (i < 10) {
String b = "0" + i;
//int bint=Integer.parseInt(b);
ht.put(code.charAt(k), b);
} else {
String istrb = "";
istrb += i;
ht.put(code.charAt(k), istrb);
}
i++;
}
String numcode = sc.next();
String[] arr = new String[numcode.length() / 2];
int index = 0;
StringBuffer sb = new StringBuffer(40);
String s = "";
for (int j = 0; j < numcode.length(); j++) {
if (j % 2 != 0 || j == 0) {
s = s + numcode.charAt(j);
arr[index] = s;
}
if (j % 2 == 0 && j != 0) {
index++;
s = "";
s = s + numcode.charAt(j);
arr[index] = s;
}
}
StringBuffer str = new StringBuffer(40);
String str1 = "";
for (int m = 0; m < arr.length; m++) {
String arrel = arr[m];
System.out.print(ht.get(arrel));
}
System.out.println(str);
}
}
示例输入和输出
2
ABCDEFGHIJKLMNOPQRSTUVWXYZ
20051920
faxmswrpnqdbygcthuvkojizle
02170308060416192402
答案 0 :(得分:1)
您不需要将信息存储在地图中。我们知道它始终为26 characters
,因此可以将它们存储在char array
中并通过indexes
直接访问它们。接下来您知道每个char由two char digit
表示,因此获取sub strings
并将它们转换为number
并直接访问char数组。我在这里使用StringBuilder
来存储输出。
以下是我对问题的实施:
public class SecretCode {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
while (t>0) {
t--;
char chars[] = scanner.next().toCharArray();
String msg = scanner.next();
StringBuilder builder = new StringBuilder();
for (int i=0; i<msg.length();) {
String number = msg.substring(i, i+2);
Integer num = Integer.parseInt(number);
builder.append(chars[num-1]);
i = i+2;
}
System.out.println(builder.toString());
}
}
}