0

次のコードでは、forループは実行されません。ブレークポイントとウォッチの問題を修正しようとしました。暗号文の正しい長さが返されますが、forループは。まで増加しませんint i >= ciphertext.length()。実際、「デバッグ」メッセージを超えて実行されるものはないようです。

private void decrypt_btnActionPerformed(java.awt.event.ActionEvent evt) {                                            


    String alphabet= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    String ciphertext="fRcXFBxXTRJ";


    status_label.setText( "Decryption has begun" );

    JOptionPane.showMessageDialog(null,"ciphertext-length: " + ciphertext.length() + "\n" + ciphertext,"Debug", JOptionPane.INFORMATION_MESSAGE);

    for (int i = 0; i>=ciphertext.length(); i--){

        System.out.println("inc:" + i);

        String cipher_current_char = getLetterAtIndex(ciphertext, i);
        int pos_char_in_alphabet = getIndexAtLetter(alphabet, cipher_current_char);


        if(pos_char_in_alphabet-2<0){

            plain_ta.setText(getLetterAtIndex(alphabet, (alphabet.length()+(pos_char_in_alphabet -2)+1 ) ));

            status_label.setText( 100/i + "%");



        }else{

            cipher_current_char = getLetterAtIndex(ciphertext, i);

            pos_char_in_alphabet = getIndexAtLetter(alphabet, cipher_current_char);

            plain_ta.setText(getLetterAtIndex(alphabet, (pos_char_in_alphabet-2)));

            status_label.setText( 100/i + "%");

        }
    }
}                          
4

4 に答える 4

7
for (int i = ciphertext.length()-1; i>=0; i--){

逆方向に作業する必要があります。また-1、範囲外の例外を回避するために必要であることに注意してください(インデックスはで始まり、0に進みますlength -1)。

あなたが立ち往生しているときは常に紙と鉛筆でループを大声でトレースしてください、それは常に役立ちます。

于 2013-01-29T00:04:45.500 に答える
3
for (int i = ciphertext.length()-1; i > 0; i--){

条件を逆にする必要があります。そうしないと、ロジックが間違っています。

于 2013-01-29T00:04:35.907 に答える
1

まず、IDEのデバッガーの使い方を学ぶことを強くお勧めします。System.out.println()また、デバッグ目的でコードに呼び出しを追加する方法も学ぶ必要があります。

そうは言っても、forループを見てみましょう。

for (int i = 0; i>=ciphertext.length(); i--)

ciphertextforループに到達し、長さが10であるとしましょうi。ゼロに初期化されます。次に、条件が10以上かどうかをチェックします。そうではないので、forループ全体がスキップされます。

ループを続行するには、forループの条件が真でなければならないことに注意してください。forループにいつ停止するかを指示するためには使用されません。

したがって、この問題を修正できます。

for (int i = 0; i<=ciphertext.length(); i--)

これで、forループはi0から始まります。これは10以下であるため、ループが実行されます。iは-1にデクリメントされます。これも10以下です。ループが実行され、i-2にデクリメントされます。

ここにパターンがあります。ループは停止しません。別の変更を加える必要があります。

for (int i = 0; i<=ciphertext.length(); i++)

ここiで、0から10に増加します。ただし、iが10の場合、例外が発生します。これは、有効なインデックスが0から9のみであるためです。最後の修正で問題が変わります。

for (int i = 0; i<ciphertext.length(); i++)
于 2013-01-29T00:15:40.023 に答える
0
i>=ciphertext.length()

する必要があります

i < ciphertext.length()
于 2013-01-29T00:05:10.313 に答える