0
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();
}

这是我的代码,我使用分隔符作为文本。我使用的输入没有被加密。我不明白问题是什么。有人可以帮我写代码吗?

4

1 回答 1

0

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

1Abc xyz.

在上面的示例中,密钥为 1(一),消息为Abc xyz.您在输入消息中的最后一个字母后按 <ENTER> 键,您的代码正确生成了加密消息,根据我上面的示例,它是

Bcd yza.

如果您在输入 [encryption] 密钥(在上面的示例中为 1)后按 <ENTER>,则“消息”是一个空字符串。这就是为什么您的邮件似乎没有加密的原因。

如果您使用调试器单步执行您的代码,那么您会发现“消息”是一个空字符串。所有好的 IDE 都有调试器。你应该学会使用它。

也许Scanner 在使用 next() 或 nextFoo() 后跳过了 nextLine()?将帮助您了解Scanner课堂的运作方式。

顺便说一句,你不应该关闭 a Scannerthat wraps System.in。您可以放心地忽略 IDE 可能显示的有关未关闭Scanner. 此外,您的最后一个while循环不是必需的。简单地打印encryptedMessage,即

System.out.println(encryptedMessage);
于 2020-10-18T14:19:59.483 回答