我正在尝试为学校制作凯撒密码但由于某种原因我的代码无法正常工作。它在解码时也没有错误。问题出在scan.nextLine()之后;在要求输入编码消息之后,代码只是跳过整个序列并停止。在我输入任何东西之前。
import java.util.Scanner;
import java.lang.Math;
import java.io.*;
public class CodeAssignment4 {
public static void main(String[] args) throws IOException
{
Scanner scan= new Scanner (System.in);
System.out.println("Please enter the key to your cipher");
int key = scan.nextInt();
if (key >= 26) {
System.out.println("Key out of range");
return;
}
System.out.println("Please enter your coded message");
String codemessage = scan.nextLine();
int length = codemessage.length();
char[]codemessagearray = codemessage.toCharArray();
char value;
char newkey = (char)key;
String decodedmessage = " ";
int i;
for (i=0; i < length; i++) {
value = codemessagearray[i];
if ((value < 'a') || (value > 'z')) {
System.out.println("Character out of range");
break;
}
value -= 'a'; //send range to zero
value -= newkey; //decrament key
value += 26; //account for negative
value = (char)((int)value%26);
decodedmessage += value + 'a';
}
if (i == length) {
System.out.println(decodedmessage);
}
}
}
我认为我的一次休息造成了问题。
答案 0 :(得分:0)
尝试使用scan.next()
代替scan.nextLine()
或创建两个Scanner
对象以避免此情况。
看起来nextLine正在消耗nextInt()
跳过的输入'\ n'并停止。由于nextInt()
仅扫描int值而不扫描行分隔符。
有关详情,请访问:Scanner