2016-12-11 15 views
1

私はスクリプトを作成しようとしていますが、それはプレーンテキストを暗号化しています。私は文字の範囲をインクリメントする可変オフセットを持っています。メソッドの暗号化は、文字列がそのままであれば文字列を通り、オフセットが示すようにすべての大文字をインクリメントします。 これまでのところすべて問題ありません。しかし、私は両方の値をメソッドの暗号化に渡すことに苦労します。インスタンスを作成してintをコンストラクタに簡単に渡すことはできますが、このメソッドでは機能しません。Javaのメソッドに文字列を渡す

public class Caesar { 

    int offset; 

    public int kryptograph(int offset){ 
     return this.offset=offset; 
    } 

    public String encrypt(String klartext) { 
     int wl = klartext.length()-1; 
     String text = null; 

     for(int i = wl; i >= 0; i++){ 
      if (Character.isUpperCase(klartext.charAt(i))){ 
       text += klartext.charAt(i)+kryptograph(offset); 
      } 
      else { 
       text += klartext.charAt(i); 
      } 
     } 
     return text; 
    } 

    /*public String decrypt(String text2) { 
     ; 
    }*/ 

    public static void main(String[] args) { 

     Caesar o = new Caesar(); 
     o.kryptograph(7); 
     Caesar k = new Caesar(); 
     k.encrypt("TEST"); 

    } 

} 

他のチュートリアルを参照しましたが、私のように見える解決策が見つかりませんでした。だからそこで比較することはあまりありません。

編集:

これは私が取得例外です:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 
    at java.lang.String.charAt(String.java:658) 
    at javaapplication25.Caesar.encrypt(Caesar.java:16) 
    at javaapplication25.Caesar.main(Caesar.java:35) 
C:\Users\Kendel\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 
BUILD FAILED (total time: 0 seconds) 
+1

あなたの問題は何ですか?コードをコンパイル/実行しようとするとどうなりますか? – UnholySheep

+2

'k.encrypt(" TEST ");'は正しいです....問題は何ですか? –

+0

私はその質問を理解していません。 – Gendarme

答えて

3

あなた例外ソース - あなたは、n-1の要素から反復し始めているが、その後、あなたはあなたのでi変数をインクリメント位置nで文字を受け取ろうとしていますが、これはこの例外につながります。

は、これであなたのコードを交換してみてください:、最終とシーザーのインスタンスにバインドする必要がありますオフセット

public class Caesar { 

    private final int offset; 

    public Ceasar(int offset){ 
     this.offset=offset; 
    } 

    public String encrypt(String klartext) { 
    StringBuilder text = new StringBuilder(); 

    for(int i = klartext.length()-1; i >=0; i--){ 
     char value = klartext.charAt(i); 
     if (Character.isUpperCase(value)){ 
      text.append(value + kryptograph(offset)); 
     } else { 
      text.append(value); 
     } 
    } 
    return text.toString(); 
    } 

    /*public String decrypt(String text2) { 
     // to be implemented 
    }*/ 

    public static void main(String[] args) { 
     Caesar o = new Caesar(7); 
     o.encrypt("TEST"); 
    } 

} 

ように各シーザークラスのインスタンスは常に同じ方法でコードとdecone。

+0

そして、ループの増分を修正する(またはむしろ減分) –

+1

@Tom良い点:)修正済み。 – Beri

関連する問題