我尝试在 java 中使用分隔符输入制作凯撒密码
I tried to make caesar cipher with delimiter input in java
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();
}
这是我的代码,我在文本中使用了定界符。我使用的输入没有加密。我不明白问题出在哪里。有人可以帮我处理代码吗?
您的问题在于您接受 [encryption] 密钥和要加密的消息的方式。例如,使用您问题中的代码,您需要输入一个紧跟消息的整数。
1Abc xyz.
在上面的示例中,密钥是 1(一),消息是 Abc xyz.
您在输入消息中的最后一个字母后按下 键,您的代码正确生成了加密消息根据我上面的例子,它是
Bcd yza.
如果您在输入 [encryption] 密钥(在我上面的示例中为 1)后按 ,则“消息”为空字符串。这就是您的邮件似乎未加密的原因。
如果您使用调试器单步调试代码,您会发现“message”是一个空字符串。所有好的 IDE 都有一个调试器。你应该学会使用它。
也许 Scanner is skipping nextLine() after using next() or nextFoo()? 可以帮助您了解 Scanner
class 的工作原理。
顺便说一下,您不应该关闭包装 System.in
的 Scanner
。您可以安全地忽略 IDE 可能显示的关于未关闭 Scanner
的任何警告。此外,不需要最后一个 while
循环。只需打印 encryptedMessage
,即
System.out.println(encryptedMessage);
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();
}
这是我的代码,我在文本中使用了定界符。我使用的输入没有加密。我不明白问题出在哪里。有人可以帮我处理代码吗?
您的问题在于您接受 [encryption] 密钥和要加密的消息的方式。例如,使用您问题中的代码,您需要输入一个紧跟消息的整数。
1Abc xyz.
在上面的示例中,密钥是 1(一),消息是 Abc xyz.
您在输入消息中的最后一个字母后按下
Bcd yza.
如果您在输入 [encryption] 密钥(在我上面的示例中为 1)后按
如果您使用调试器单步调试代码,您会发现“message”是一个空字符串。所有好的 IDE 都有一个调试器。你应该学会使用它。
也许 Scanner is skipping nextLine() after using next() or nextFoo()? 可以帮助您了解 Scanner
class 的工作原理。
顺便说一下,您不应该关闭包装 System.in
的 Scanner
。您可以安全地忽略 IDE 可能显示的关于未关闭 Scanner
的任何警告。此外,不需要最后一个 while
循环。只需打印 encryptedMessage
,即
System.out.println(encryptedMessage);