当前位置: 首页 > 知识库问答 >
问题:

凯撒密码的实现

舒枫涟
2023-03-14

示例:encodeCaesar(“ac”,3)返回“df”。如果给定的整数值小于0或大于26,则应返回空字符串。

public class Functionality {
    public static void main(String[] args) {
    }

    public static String encodeCaesar(String s, int val) {
        char[] newString = s.toCharArray();
        for (int i = 0; i < s.length(); i++) {
            int newChar = newString[i] + val + 26;

            // Handle uppercase letters
            while (Character.isUpperCase(newString[i]) && newChar >= 65 + 26) {
                newChar -= 26;
            }

            // Handle lowecase letters
            while (Character.isLowerCase(newString[i]) && newChar >= 97 + 26) {
                newChar -= 26;
            }

            newString[i] = (char) (newChar);
        }

        return String.valueOf(newString);
    }
}

我的问题是,作为回报,它只给我真或假。如何解决这个问题:该方法应该返回一个字符串,其中每个字符都是根据指定的整数值移动的。

共有1个答案

苏畅
2023-03-14

下面的代码片段解决了一些小问题:

  • 非字母字符(如果有)由密码保持不变
  • while循环替换为if
  • 使用模运算符在z
  • 上换行值
public static String encodeCaesar(String s, int val) {
    char[] newString = s.toLowerCase().toCharArray();
    for (int i = 0; i < newString.length; i++) {
        char newChar = newString[i];

        if (newChar >= 'a' && newChar <= 'z') {
            newString[i] = (char) ('a' + (newChar + val - 'a') % 26); 
        }
    }

    return new String(newString); // String.valueOf calls it anyway
}

比较:

System.out.println("encode: " + encodeCaesar("Viva Caesar! Morituri te salutant!", 3));
System.out.println("caesar: " + caesar("Viva Caesar! Morituri te salutant!", 3));
encode: ylyd fdhvdu! prulwxul wh vdoxwdqw!
caesar: ylyd=fdhvdu>=prulwxul=wh=vdoxwdqw>

 类似资料:
  • 我需要编写一个python、hacker和wow这些单词的加密文本,并且使用不包括使用RAW_INPUT的python中的凯撒密码,距离为3。这是我到目前为止,但我不断得到一个错误消息,我不知道如何修复它。

  • 问题内容: 我通过java进行了凯撒密码,它可以运行,但是在用户输入密钥后不对任何内容进行加密! 这是我的代码 跑: 问题答案: 使用效率不是很高…您可以对值进行整数运算以获得其索引。 我在代码中添加了注释以解释更多信息,但这就是我想出的。 输出应该是这样的

  • 所以,我试图想出一种方法来对凯撒密码进行加密/解密(在这里,你输入一个值,然后将字母沿着字母表移动很多次,例如,如果密钥是3,那么a将变成d,b将变成e,c将变成f,以此类推),但我需要使用递归,而不是迭代。到目前为止,我只对最后一个字符进行了加密,并输出“encrypted-w”,这对我来说是没有意义的。

  • 我在做凯撒密码,这是我的密码 我尝试使用%来解决这个问题(我也不是100%确定如何使用模运算符),但我没有成功。 文本文件的内容是:

  • 基本上,我必须创建一个凯撒密码,它只是用一个int'k'以外的字母替换给出的每个字母。这需要2个命令行参数:“./caesar”和“k”,它们由用户提供。它工作得很好;但有一个问题: 它将“Barfoo”加密为“Eduirr”,使用3作为正确的密钥;将“Barfoo”加密为“Fevjss”,使用4作为正确的密钥 但是它不是用65作为密钥将“barfoo”加密为“onesbb”,而是将其加密为“oo