有 Java 编程相关的问题?

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

我尝试在java中使用定界符输入制作caesar密码

public static void main(String[] args) {
    String message, encryptedMessage = "";
    int key;
    char ch;
    Scanner sc = new Scanner(System.in);
    
    key = sc.nextInt();
    
    message = sc.nextLine();
    sc.useDelimiter(" ");
    
    // I think the problem is in the encrypting formula.

    for(int i = 0; i < message.length(); ++i){
        ch = message.charAt(i);
        
        if(ch >= 'a' && ch <= 'z'){
            ch = (char)(ch + key);
            
            if(ch > 'z'){
                ch = (char)(ch - 'z' + 'a' - 1);
            }
            
            encryptedMessage += ch;
        }
        else if(ch >= 'A' && ch <= 'Z'){
            ch = (char)(ch + key);
            
            if(ch > 'Z'){
                ch = (char)(ch - 'Z' + 'A' - 1);
            }
            
            encryptedMessage += ch;
        }
        else {
            encryptedMessage += ch;
        }
    }
    
    while(sc.hasNext()){
        System.out.println(sc.next()+encryptedMessage);
    }
    sc.close();
}

这是我的代码,我对文本使用分隔符。我使用的输入没有加密。我不明白问题出在哪里。有人能帮我查一下密码吗


共 (1) 个答案

  1. # 1 楼答案

    您的问题在于接受[加密]密钥和要加密的消息的方式。例如,使用问题中的代码,您需要输入一个紧接着消息的整数

    1Abc xyz.
    

    在上面的例子中,键是1(一),消息是Abc xyz.当你点击<;输入>;在输入消息中的最后一个字母后输入密钥,您的代码将正确生成加密消息,根据我上面的示例,加密消息是

    Bcd yza.
    

    如果你点击<;输入>;输入[encryption]密钥(在上面的示例中是1)后,“message”是一个空字符串。这就是为什么你的信息似乎没有加密

    如果使用调试器逐步检查代码,则会发现“message”是一个空字符串。所有好的IDE都有一个调试器。你应该学会使用它

    也许Scanner is skipping nextLine() after using next() or nextFoo()?会帮助您理解Scanner类是如何工作的

    顺便说一句,你不应该关闭一个Scanner包装System.inScanner。您可以安全地忽略IDE可能显示的关于不关闭Scanner的任何警告。此外,不需要最后一个while循环。只需打印encryptedMessage,即

    System.out.println(encryptedMessage);