输出等于null

时间:2015-09-04 10:55:19

标签: java string

我一直在尝试创建一个程序,但由于导致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

1 个答案:

答案 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());
    }
  }
}