0

在以下代码中,永远不会执行 for 循环。我试图解决断点和手表的问题。返回密文的正确长度,但是 for 循环不会增加 until 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--)

假设您已到达 for 循环并且ciphertext长度为 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 回答