【问题标题】:Checking if a value is equal to another value and if that is true go back to another value检查一个值是否等于另一个值,如果是,则返回另一个值
【发布时间】:2021-01-04 21:37:36
【问题描述】:

大家好,快速 java 问题,

我正在尝试使用 Ascii 表来加密和解密最终将由用户键入的消息。

Ascii Table

I have the base encryption code here

一旦代码到达 z 或 Z,当我试图让代码分别循环回 a 和 A 时,shift 将分别显示 { 和 [

z --> 不是 { Z --> A 不是 [

请询问您是否需要任何澄清,因为我不太确定我的措辞

【问题讨论】:

  • 嗨,也许检查值是 90 (Z) 还是 122 (z),然后将值重新分配为 65 (A) 或 97 ( a) 分别。
  • 它是一个带有 if else 的简单 for 循环。并且不要将链接代码放在这里。将确切有问题的精确代码放在您遇到问题的地方。欢迎来到 SO。
  • 与代码的链接不起作用。不包括最低工作示例。避免使用外部链接,因为它们会随着时间的推移而变得陈旧。

标签: java encryption ascii


【解决方案1】:

您正在编程的密码是凯撒密码。

这是我不久前编写的一个实现:

public class Main {

    public static void main(String[] args) {

        System.out.println(caesar("hello", 1));
    }

    public static String caesar(String text, int offset) {

        String output = "";
        char outputchar;

        for (int i = 0; i < text.length(); i++) {
            if (isLetter(text.charAt(i))) {
                outputchar = (char) (text.charAt(i) + offset);

                if (Character.isUpperCase(text.charAt(i))) {
                    if ((!isLetter(outputchar)) || (Character.isLowerCase(outputchar))) {
                        outputchar = (char) (outputchar - 26);
                    }
                } else {
                    if ((!isLetter(outputchar)) || (Character.isUpperCase(outputchar))) {
                        outputchar = (char) (outputchar - 26);
                    }
                }
                output += outputchar;
            } else {
                output += text.charAt(i);
            }
        }
        return output;
    }


    public static boolean isLetter(char letter) {
        return ((letter >= 97) && (letter <= 122) || (letter >= 65) && (letter <= 90));
    }
}

它通过检查char 是否在它所属的范围内来处理您发布的问题,包括大小写更正。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2021-03-28
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 2021-03-08
    相关资源
    最近更新 更多