问题描述
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)后按
如果使用调试器逐步执行代码,则会发现“消息”是空字符串。所有好的IDE都有调试器。您应该学会使用它。
也许Scanner is skipping nextLine() after using next() or nextFoo()?将帮助您了解Scanner
类的工作原理。
顺便说一句,您不应该关闭包裹Scanner
的{{1}}。您可以放心地忽略IDE可能显示的有关未关闭System.in
的警告。另外,不需要最后一个Scanner
循环。只需打印while
,即
encryptedMessage