尝试编码,但有错误

时间:2015-11-26 02:03:41

标签: java arrays encoding

我试图通过将用户输入转换为char数组然后对其进行编码并将其再次转换为字符串来对其进行编码来打印出来但是有一些错误(它假设转换为A)到Z,B到Y等......)和(a到z,b到y),帮助我被困了好几个小时。



import java.util.*;
public class PartA {

  public static void main(String args[]) {
    PartA one = new PartA();
    String i = one.encode();
    System.out.println(i);
  }

  public String encode() {
    Scanner input = new Scanner(System.in);
    String word = input.nextLine();
    char ch[] = word.toCharArray();
    for (int x = 0; x <= ch.length; x++) {

      if (ch[x] >= 'A' || ch[x] >= 'z') {
        ch[x] = (char)(ch[x] + 25);
      }
    }
    String enc = ch.toString();
    return enc;
  }
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

将25添加到char中将无法实现您的想法。

考虑一下char&#39; B&#39;。它的Ascii值为66,添加25将得到91,这是一个&#39; [&#39;。

请参阅here以获取字符列表及其对应的Ascii值。

想想你想要实现的目标。你想要&#39; B&#39;映射到&#39; Y&#39;,即您希望第二个字符映射到倒数第二个字符。第三个char映射到第三个到最后一个char。你怎么能实现这个目标?

答案 1 :(得分:0)

您需要考虑进行此转换的逻辑。

第一步是研究ASCII table并找到你需要的逻辑。

例如,如果您需要转换A中的ZB中的Y等,请找到相关性:

A - Z
65 - 90

B - Y
66 - 89

C - X
67 - 88

...

azby相同......

此代码可以解决您的问题:

import java.util.*;

public class PartA {

    private final static int A_UPPER_ASCII_NUMBER = 65;
    private final static int A_LOWER_ASCII_NUMBER = 97;

    public static void main(String args[]) {
        PartA one = new PartA();
        String i = one.encode();
        System.out.println(i);
    }

    public String encode() {
        Scanner input = new Scanner(System.in);
        String word = input.nextLine();
        char ch[] = word.toCharArray();
        for (int x = 0; x < ch.length; x++) {

            if (ch[x] >= 'A' && ch[x] <= 'Z') {
                int res = (25 + (A_UPPER_ASCII_NUMBER - ch[x]) * 2);
                ch[x] = (char) (ch[x] + res);
            }

            if (ch[x] >= 'a' && ch[x] <= 'z') {
                int res = (25 + (A_LOWER_ASCII_NUMBER - ch[x]) * 2);
                ch[x] = (char) (ch[x] + res);
            }
        }
        String enc = ch[0] + "";
        return enc;
    }
}

当然,对同一件事情有一个更好的逻辑。