0

私は、複数のエンコーディング スキームを持つプログラムを作成しています。そのうちの 1 つは、キーが偶数か奇数かに基づくプライム シフトです。デコード方式は次のとおりです::

The key is checked to see whether it is odd or even. For an odd key, odd numbered characters are in order first in the new string, then all even indexes. If the key is even all even indexes are first, then all the odd indexes

したがって、文字列「abcdefg」とキー 27 の場合、キーが 28 の場合、新しい文字列は「bdfaceg」である必要があり、新しい文字列は「acegbdf」である必要があります。

奇妙なことに、キーが奇数で、文字列の長さが奇数または偶数の場合、完全にデコードされます。キーが偶数で、文字列の長さが偶数の場合、正常にデコードされます。

ただし、キーが偶数で文字列の長さが奇数の場合、正しくデコードされません。

テスト文字列「ここにメッセージを入力してください」を使用します。これらは私の出力です::

Encoded Key = 28 ; Encoded Message "EtrMsaehr.ne esg ee" Message length = 19
Decoded Key = 28 ; Decoded Message "E.tnreM seasegh renull"

したがって、偶数のエントリは適切な場所にありますが、奇数のエントリは逆にプルするか、奇数のインデックスで押し戻す必要があると思います...それらをインデックスに戻すのが最も簡単だと思いますが、それでもかなりJavaが初めてで、その方法がわかりません。

このインスタンスで使用している関数のコードは次のとおりです。

protected String decode(String a, int k)
{
    System.out.println(a.length());
    String[] out = new String [a.length()];
    String decode = a;
    int key = k;
    boolean kP = IsEven(key);
    String odd = "";

    if (kP)
    {
        //Key is even
        try
        {
            int f = 0;
            for (int i =0 ; i<(a.length()/2); i++)
            {
                out[f] = Character.toString(a.charAt(i));
                f+=2;
            }
            int g = 1;
            for (int i = (a.length()/2) ; i<(a.length()); i++)
            {
                out[g] = Character.toString(a.charAt(i));
                g+=2;
            }
        }
        catch ( IndexOutOfBoundsException e )
        {
            System.out.println("Out of bounds");
            while(true)
                break;
        }
    }
    else
    {
        //key is odd
        try
        {
            int f = 1;
            for (int i =0 ; i<(a.length()/2); i++)
            {
                    out[f] = Character.toString(a.charAt(i));
                    f+=2;
            }

            int g = 0;
            for (int i = (a.length()/2) ; i<(a.length()); i++)
            {
                    out[g] = Character.toString(a.charAt(i));
                    g+=2;
            }
        }
        catch ( IndexOutOfBoundsException e )
        {
            System.out.println("Out of bounds");
            while(true)
                break;
        }
    }
    for (int i = 0 ; i<a.length(); i++)
            odd += out[i];
        System.out.println(odd);
    return(odd);
}
4

2 に答える 2

1

簡単な例として、手動でもコードをステップ実行します。

  • キー: 2; 文字列:「あ」

  • キー: 2; 文字列:「AB」

  • キー: 2; 文字列: "ABC"

詳細を確認してください。何が起こっているかがわかれば、問題を修正できます。

于 2013-08-08T12:09:50.500 に答える