有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用编码代码的java编码字符串

以下是我的代码片段:

 for (int i=0;i<(in.length());i++)
    {
        char e=cop.charAt(i);
        if (e==' ')
        {
            sav=sav+" ";
            continue;
        }
        int n=(int)e;
        if (n>=(91-ef))
        {
            //here is where the statement should be
            continue;
        }    
        n=n+ef;
        sav=sav+((char)n);
    }

in:用户输入的字符串

ef:用户输入的编码因子

sav:我正在其中存储修改过的字符串

在这里,我需要做的是输入一个大写字符串(单词或句子),通过用户输入的编码因子增加字符串中每个字符的ASCII值,并以新的ASCII值打印相应的字符。空格将保留空格,如果字符应超过“Z”,它将从“A”重新开始。这是我遇到的最后一个问题。在上面的代码中我注释过的地方应该有一条语句,但我不知道它应该是什么。请帮忙

下面是我需要做的一个示例:

输入:汤米

输出:YTRRD(编码因子为5时)


共 (3) 个答案

  1. # 1 楼答案

    我会先添加,然后使用字符而不是原始数字进行检查

    e = Character.toUpperCase(e);
    e += 5;
    if (e > 'Z')
       e -= 'Z' + 1 - 'A';
    sav += e;
    

    或者使用常数

    static final int LETTERS_IN_ALPHABET = 'Z' + 1 - 'A';
    
    // in code
    e = Character.toUpperCase(e);
    e += 5;
    if (e > 'Z')
       e -= LETTERS_IN_ALPHABET;
    sav += e;
    
  2. # 2 楼答案

    在您的代码中,这应该是可行的:

    if (n>=(91-ef))
    {
         n = 64 + (n+ef-90) -ef;
    }    
    
    • 不需要continue
    • n+ef是最终的“正常”值,例如:Y=89,因此,加上5,它变成94
    • -90检查其大于90的程度,即4(在Y的情况下)
    • 64 + (n+ef-90)-然后把这个数字加到64,即64+4=68=D
    • -ef当你在那之后添加ef。这段代码后面的行是:n=n+ef;。这将使68+4=72=H。但是你已经有了所需的字符,也就是D,所以你减去ef,它变成68-5=63。然后,在下一行中,将其相加,得到63+5=68=D
  3. # 3 楼答案

    遵循以下步骤:

    1. e是ASCII码中的一个字符。使用e - 'A'将其转换为[0-25]
    2. 然后添加ef
    3. 由于结果可能超过25(即^{),因此使用模26
    4. 最后,将'A'添加到结果中,以便将值转换回['A'-'Z']

    代码:

    String in = "TOMMY";
    String sav="";
    int ef = 5;
    
    for (int i=0;i<(in.length()); i++) {
      char e=in.charAt(i);
      if (e==' ')
      {
        sav=sav+" ";
      } else {
        sav += (char) ('A' + ((e - 'A' + ef) % 26));
      }
    }
    
    System.out.println(sav);
    

    结果:

    YTRRD

    • 注意:使用String+=是不好的。改用StringBuilder
    • 注意:如果要为ef启用负值,请将(e - 'A' + ef)替换为(e - 'A' + ef + 26)