正确使用for循环

时间:2013-01-29 00:02:28

标签: java string loops for-loop

在以下代码中,永远不会执行for循环。我试图用断点和手表解决问题。返回密文的正确长度,但for循环在int i >= ciphertext.length()之前不会递增。事实上,似乎没有任何东西执行过'Debug'消息。

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 个答案:

答案 0 :(得分:7)

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

你需要倒退。另请注意-1,您需要它来避免超出范围的异常(索引从0开始并转到length -1)。

当你被困住时,总是用纸和铅笔大声追踪你的循环,这总是有帮助的。

答案 1 :(得分:3)

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

你需要扭转条件,否则逻辑是错误的。

答案 2 :(得分:1)

首先,我强烈建议您学习如何使用IDE的调试器。您还应该学习如何为代码添加System.out.println()调用以进行调试。

话虽如此,让我们看一下for循环:

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

假设您已到达for循环,ciphertext的长度为10. i初始化为零。然后条件检查它是否大于或等于10.没有它,所以整个for循环被跳过。

请注意,for循环的条件必须为true才能继续循环。 用于告诉for循环何时停止。

所以我们可以解决这个问题:

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

现在for循环以i为0开始。这小于或等于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++)

答案 3 :(得分:0)

i>=ciphertext.length()

应该是

i < ciphertext.length()