2017-05-30 10 views
0

私は現在、主要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

これを行うつもりでしたか?> 'i == message.length();'をforループ条件としましたか?それは 'i

+0

それは私にも奇妙に見える –

+0

問題は、forループ条件がすべて満たされないため(つまり、forループ内の文が実行されないため)、 'CryptMessage'が空の文字列を返すということです。 dは 'StringIndexOutOfBoundsException'を取得します。 –

答えて

1

ループ条件i == message.length()は、i < message.length()である必要があります。

ループ内の条件は、次の繰り返しに進むときにを指定します。。あなたの状態は最初の反復ではfalseで、ループは(最初の反復の後で)直ちに終了します。

1

これはデバッガで解決できる問題です。一度に1行ずつコードを調べると、nimrodmが指摘したループ条件が期待通りに実行されないという事実を一目で把握することが容易になります。さらに、実行中に変数の値をチェックし、各ステップで変数が正しいことを確認することもできます。

関連する問題