【问题标题】:How to create an encoder? Decoder?如何创建编码器?解码器?
【发布时间】:2020-06-09 20:22:58
【问题描述】:

总的来说,我对编程还很陌生,我想知道如何对输入的文本进行编码/解码。

前 A -> D 的所有字母必须减少 3 个字母 B -> E 等等

我会放一些伪代码作为例子:

输入消息:“LORYHBRX”

编码消息:LORYHBRX

解码消息:ILOVEYOU

输出消息:“我爱你”

请帮忙。

目前为止

import java.util.*;

public class Encoder {

public static void main(String[] args) 
{   

    String a = "d";
    String b = "e";
    String c = "f";
    String d = "g";
    String e = "h";
    String f = "i";
    String g = "j";
    String h = "k";
    String i = "l";
    String j = "m";
    String k = "n";
    String l = "o";
    String m = "p";
    String n = "q";
    String o = "r";
    String p = "s";
    String q = "t";
    String r = "u";
    String s = "v";
    String t = "w";
    String u = "x";
    String v = "y";
    String w = "z";
    String x = "a";
    String y = "b";
    String z = "c";

    Scanner in = new Scanner(System.in);
    System.out.println("Please enter the text you wish to encode.");
    String place = in.nextLine();
    System.out.println(place);

}
}

我正在尝试将输入的内容转换为上面的变量。

我想我将所有这些字符串声明为变量,但我不知道如何使它们可以通过输入进行更改。

【问题讨论】:

  • 从写代码开始。并在遇到特定代码问题时发布问题。这是这里唯一的解决方案。
  • 我很抱歉。我把我的代码放进去。
  • 呃!将目标字母存储为String a = "d" 对您没有帮助,因为您无法将字符串中的字母转换为变量名。您需要了解数组和其他容器类。对于手头的任务,编写一个将源字母转换为目标字母的函数。您可以利用 26 个字母在 ASCII 中形成一个连续块这一事实。
  • 顺便说一句,您想要的代码称为凯撒密码。搜索那个和 SO 上的 Java 标记应该会给你关于如何攻击这个的提示。
  • @StevenJobs loryhbrx 不可能给你 iloveyou,但 iloveyou 给你 loryhbrx。如果是这样,请告诉我,以便我发布我的答案:)

标签: java eclipse algorithm encoding decoding


【解决方案1】:

我会给你一些提示,如何进行解码和编码将是相反的过程。

首先,你应该知道计算机只能理解称为Ascii code的数字。

ASCII码b&A等字符的数字表示,因此大写和小写字母都有Ascii code,它是int类型。

Read and See Ascci table here

另一个你应该知道的主题是Casting

强制转换 将一种类型转换为另一种类型,例如将 int 转换为 char 或反之亦然,但您应该知道,将某种类型转换为另一种类型,例如将 boolean 类型转换为 int 是不可能的。

Read about casting in Java

让我们谈谈编码,让你自己去解决,因为它是编码的逆向。

关于如何编码的提示

  1. 不需要像String a = "a"这样定义String;
  2. 由于您了解了作为数字的 Ascci 代码,因此您可以使用 for 循环 97 到 122 并进行强制转换以获得小字符。

    例子:

    System.out.println("Asci code of small a is " + (int)'a' + "\nsmall a is " + (char)97);
    

    输出:

    Asci code of small a is 97
    small a is a
    

注意:您将 char 转换为 int 并将 int 转换为 char。

  1. 因为你是在处理数字,所以你可以做加法。

    例子:

    System.out.println("Three char after a is " +  (char)(97+3));
    

    输出:

    there char after a is d
    

对于字符 x、y 和 z,您可以从它们的 asci 码中减去 23,例如 120-23 将给出 a 的 asci 码。

【讨论】:

    【解决方案2】:

    编码和解码的完整代码

    import java.util.Scanner;
    
    public class coder {
    
        public static void main(String[] args) {
            String[] qe = {"1 ","2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","10 ","11 ","12 ","13 ",
                "14 ","15 ","16 ","17 ","18 ","19 ","20 ","21 ","22 ","23 ","24 ","25 ","26 "};
            String [] eq = {"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"};
            Scanner in = new Scanner(System.in);
            System.out.println("Please enter the text you wish to encode.");
            String place = in.nextLine();
            place = place.toLowerCase();
            place = place.replace("a", qe[0]);
            place = place.replace("b", qe[1]);
            place = place.replace("c", qe[2]);
            place = place.replace("d", qe[3]);
            place = place.replace("e", qe[4]);
            place = place.replace("f", qe[5]);
            place = place.replace("g", qe[6]);
            place = place.replace("h", qe[7]);
            place = place.replace("i", qe[8]);
            place = place.replace("j", qe[9]);
            place = place.replace("k", qe[10]);
            place = place.replace("l", qe[11]);
            place = place.replace("m", qe[12]);
            place = place.replace("n", qe[13]);
            place = place.replace("o", qe[14]);
            place = place.replace("p", qe[15]);
            place = place.replace("q", qe[16]);
            place = place.replace("r", qe[17]);
            place = place.replace("s", qe[18]);
            place = place.replace("t", qe[19]);
            place = place.replace("u", qe[20]);
            place = place.replace("v", qe[21]);
            place = place.replace("w", qe[22]);
            place = place.replace("x", qe[23]);
            place = place.replace("y", qe[24]);
            place = place.replace("z", qe[25]);
            System.out.println(place);
    
            place = place.replace("26 ", eq[25]);
            place = place.replace("25 ", eq[24]);
            place = place.replace("24 ", eq[23]);
            place = place.replace("23 ", eq[22]);
            place = place.replace("22 ", eq[21]);
            place = place.replace("21 ", eq[20]);
            place = place.replace("20 ", eq[19]);
            place = place.replace("19 ", eq[18]);
            place = place.replace("18 ", eq[17]);
            place = place.replace("17 ", eq[16]);
            place = place.replace("16 ", eq[15]);
            place = place.replace("15 ", eq[14]);
            place = place.replace("14 ", eq[13]);
            place = place.replace("13 ", eq[12]);
            place = place.replace("12 ", eq[11]);
            place = place.replace("11 ", eq[10]);
            place = place.replace("10 ", eq[9]);
            place = place.replace("9 ", eq[8]);
            place = place.replace("8 ", eq[7]);
            place = place.replace("7 ", eq[6]);
            place = place.replace("6 ", eq[5]);
            place = place.replace("5 ", eq[4]);
            place = place.replace("4 ", eq[3]);
            place = place.replace("3 ", eq[2]);
            place = place.replace("2 ", eq[1]);
            place = place.replace("1 ", eq[0]);
            System.out.println(place);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 2019-03-26
      相关资源
      最近更新 更多