Java 中的凯撒密码 - 打印空行
Caesar Cipher in Java - printing blank line
我目前正在尝试使用密钥 18 在 Java 中编写凯撒密码。
我目前的代码如下,但由于某种原因我无法计算,它没有工作。
import java.util.Objects;
import java.util.Scanner;
class MainApplication {
private static final Scanner input = new Scanner(System.in);
private static String CryptMessage(int key, String message) {
StringBuilder temp = new StringBuilder();
for (int i = 0; i == message.length(); i++) {
if (Character.isLetter(message.charAt(i))) {
int num = (int) message.charAt(i);
num = num + key;
if (Character.isUpperCase(message.charAt(i))) {
if (num > (int) ('Z')) {
num = num - 26;
} else if (num < (int) ('A')) {
num = num + 26;
}
}
if (Character.isLowerCase(message.charAt(i))) {
if (num > (int) ('z')) {
num = num - 26;
} else if (num < (int) ('a')) {
num = num + 26;
}
}
temp.append((char) num);
} else {
temp.append(message.charAt(i));
}
}
message = temp.toString();
return message;
}
private static void encrypt(){
int key = 18;
System.out.println("Please enter a message to encrypt: ");
String message = input.nextLine();
System.out.println(CryptMessage(key, message));
}
private static void decrypt(){
int key = -18;
System.out.println("Please enter a message to decrypt: ");
String message = input.nextLine();
System.out.println(CryptMessage(key, message));
}
public static void main(String args[]){
System.out.println("Message Encryption System 3.0");
System.out.println("Please select an option:");
System.out.println("[1] - Encrypt Message");
System.out.println("[2] - Decrypt Message");
String opt = input.nextLine();
if(Objects.equals(opt, "1")){
encrypt();
}
else if(Objects.equals(opt, "2")){
decrypt();
}
else{
System.out.println("Invalid input.");
}
}
}
程序运行,但是,它在应该是加密(或解密)消息的位置打印一个空行。
循环条件i == message.length()
应该是i < message.length()
.
for
循环中的条件决定了何时继续下一次迭代。您的条件在第一次迭代时为假,循环立即终止(在第一次迭代后)。
这是一个可以用调试器解决的问题。如果您一次一行地检查代码,则更容易发现 nimrodm 指出的循环条件未按您期望的方式执行的事实。此外,您可以在执行过程中检查变量的值,并确保它们在每一步都是正确的。
我目前正在尝试使用密钥 18 在 Java 中编写凯撒密码。
我目前的代码如下,但由于某种原因我无法计算,它没有工作。
import java.util.Objects;
import java.util.Scanner;
class MainApplication {
private static final Scanner input = new Scanner(System.in);
private static String CryptMessage(int key, String message) {
StringBuilder temp = new StringBuilder();
for (int i = 0; i == message.length(); i++) {
if (Character.isLetter(message.charAt(i))) {
int num = (int) message.charAt(i);
num = num + key;
if (Character.isUpperCase(message.charAt(i))) {
if (num > (int) ('Z')) {
num = num - 26;
} else if (num < (int) ('A')) {
num = num + 26;
}
}
if (Character.isLowerCase(message.charAt(i))) {
if (num > (int) ('z')) {
num = num - 26;
} else if (num < (int) ('a')) {
num = num + 26;
}
}
temp.append((char) num);
} else {
temp.append(message.charAt(i));
}
}
message = temp.toString();
return message;
}
private static void encrypt(){
int key = 18;
System.out.println("Please enter a message to encrypt: ");
String message = input.nextLine();
System.out.println(CryptMessage(key, message));
}
private static void decrypt(){
int key = -18;
System.out.println("Please enter a message to decrypt: ");
String message = input.nextLine();
System.out.println(CryptMessage(key, message));
}
public static void main(String args[]){
System.out.println("Message Encryption System 3.0");
System.out.println("Please select an option:");
System.out.println("[1] - Encrypt Message");
System.out.println("[2] - Decrypt Message");
String opt = input.nextLine();
if(Objects.equals(opt, "1")){
encrypt();
}
else if(Objects.equals(opt, "2")){
decrypt();
}
else{
System.out.println("Invalid input.");
}
}
}
程序运行,但是,它在应该是加密(或解密)消息的位置打印一个空行。
循环条件i == message.length()
应该是i < message.length()
.
for
循环中的条件决定了何时继续下一次迭代。您的条件在第一次迭代时为假,循环立即终止(在第一次迭代后)。
这是一个可以用调试器解决的问题。如果您一次一行地检查代码,则更容易发现 nimrodm 指出的循环条件未按您期望的方式执行的事实。此外,您可以在执行过程中检查变量的值,并确保它们在每一步都是正确的。