java - Java 中的凯撒密码 - 打印空行

标签 java console-application caesar-cipher

我目前正在尝试用 Java 编写一个 key 为 18 的凯撒密码。

到目前为止,我的代码如下,但由于某种原因我无法计算出来,它不起作用。

import java.util.Objects;
import java.util.Scanner;
class MainApplication {
private static final Scanner input = new Scanner(System.in);

private static String CryptMessage(int key, String message) {
    StringBuilder temp = new StringBuilder();
    for (int i = 0; i == message.length(); i++) {
        if (Character.isLetter(message.charAt(i))) {
            int num = (int) message.charAt(i);
            num = num + key;
            if (Character.isUpperCase(message.charAt(i))) {
                if (num > (int) ('Z')) {
                    num = num - 26;
                } else if (num < (int) ('A')) {
                    num = num + 26;
                }
            }
            if (Character.isLowerCase(message.charAt(i))) {
                if (num > (int) ('z')) {
                    num = num - 26;
                } else if (num < (int) ('a')) {
                    num = num + 26;
                }
            }
            temp.append((char) num);
        } else {
            temp.append(message.charAt(i));
        }
    }
    message = temp.toString();
    return message;
}
private static void encrypt(){
    int key = 18;
    System.out.println("Please enter a message to encrypt: ");
    String message = input.nextLine();
    System.out.println(CryptMessage(key, message));
}
private static void decrypt(){
    int key = -18;
    System.out.println("Please enter a message to decrypt: ");
    String message = input.nextLine();
    System.out.println(CryptMessage(key, message));
}
public static void main(String args[]){
    System.out.println("Message Encryption System 3.0");
    System.out.println("Please select an option:");
    System.out.println("[1] - Encrypt Message");
    System.out.println("[2] - Decrypt Message");
    String opt = input.nextLine();
    if(Objects.equals(opt, "1")){
        encrypt();
    }
    else if(Objects.equals(opt, "2")){
        decrypt();
    }
    else{
        System.out.println("Invalid input.");
    }
}
}

程序运行,但是,它在加密(或解密)消息所在的位置打印一个空行。

最佳答案

循环条件i == message.length()应该是i < message.length() .

for 中的条件循环确定何时继续下一次迭代。您的条件在第一次迭代时为 false,循环立即终止(在第一次迭代之后)。

关于java - Java 中的凯撒密码 - 打印空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44262511/

相关文章:

java - 进行猜数字游戏,但不会打印任何内容

java - 类型不匹配 : cannot convert from long to int

java - 如果 ParseUser 正在查看自己的帖子,则菜单项仅出现在操作栏中

linux - 数学表达式结果分配给 Bash 变量

c - 在 C 中使用简单的 Cesar 密码

java - 如何在java中使用apache poi更新docx文件的元数据?

c++ - 将文本从子 GUI 进程发送到控制台父进程的最简单方法是什么?

c# - 显示输出查询?

c - Print Caesar Shift in C 正在打印输入的 HELLO 文本

c - 我正在尝试对字符 z (ASCII 122) 执行凯撒移位。如何给它 "more room"以防止它溢出超过 127?