2017-05-30 79 views
0

我目前正在写一个恺撒密码在Java中与主要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."); 
    } 
} 
} 

该程序运行,但是,它打印一个空行,加密(或解密)的消息应该是。

+1

你打算这样做 - >'我== message.length();'作为你的循环条件?它应该是'我

+0

对我来说这看起来很奇怪 –

+0

问题在于'CryptMessage'返回一个空字符串,因为for循环条件根本不满意(因此for循环内部没有任何语句会被执行),即使它的确如此, d得到一个'StringIndexOutOfBoundsException'。 –

回答

1

环路条件i == message.length()应该是i < message.length()

for循环中的条件决定了何时继续下一次迭代。你的条件在第一次迭代时是错误的,并且循环立即终止(在第一次迭代之后)。

1

这是一个可以用调试器解决的问题。如果您一次只读一行代码,那么可以更容易地发现循环条件nimrodm指出的事实并未按照您期望的方式执行。另外,您可以在执行过程中检查变量的值,并确保每一步都正确。