Java 为什么for循环运行6次迭代?

Java 为什么for循环运行6次迭代?,java,for-loop,Java,For Loop,我需要帮助理解为什么for循环运行6次的逻辑。循环不应该在i=4,j=5处停止吗 public static boolean methodName(int[] hand) { int counter = 0; for (int i = 0; i < hand.length-1; i++) { for (int j = i+1; j < hand.length; j++) { if (hand[i] == hand[j] &am

我需要帮助理解为什么
for
循环运行6次的逻辑。循环不应该在i=4,j=5处停止吗

public static boolean methodName(int[] hand)
{
    int counter = 0;

    for (int i = 0; i < hand.length-1; i++) {
        for (int j = i+1; j < hand.length; j++) {
            if (hand[i] == hand[j] && j != i) {
                counter++;
                System.out.println(counter);
            }
        }
    }
    if (counter == 4) {

        return true;
    }
    return false;
} // end method

它上升到6,因为对于i的每一个值,它会通过j的每一个大于i的值

因此,这六个条目是:

  • i=0,j=1
  • i=0,j=2
  • i=0,j=3
  • i=1,j=2
  • i=1,j=3
  • i=2,j=3

  • 我猜您需要额外的检查以确保没有匹配项被计数两次。

    for循环(
    for(int I=0;I
    )的外部
    将运行
    I-1
    次(长度为
    I
    )。然后内部循环将在外部
    for
    循环的每次迭代中运行
    n-i
    。因此,它的运行次数远远超过六次。它之所以只运行六次,是因为打印出
    计数器的条件只发生六次。如果添加
    println()
    您将看到,当长度为5时,它会运行10次:

    int numOfLoops = 0;
    for (int i = 0; i < hand.length-1; i++) {
        for (int j = i+1; j < hand.length; j++) {
            System.out.println(++numOfLoops);
    
            if (hand[i] == hand[j] && j != i) {
                counter++;
                System.out.println(counter);
            }
        }
    }
    
    I=0,J=1,2=2计数器=1
    I=0,J=2 2=2计数器=2
    I=0,J=3 2=2计数器=3
    I=0,J=4 23计数器=3不打印
    I=1,J=2,2=2计数器=4
    I=1,J=3,2=2计数器=5
    I=1,J=4,23计数器=5无打印
    I=2,J=3,2=2计数器=6
    I=3,J=4,23计数器=6无打印
    
    您是否考虑过添加一个
    println(i)
    println(j)
    来查看这些值是如何变化的?手的长度是多少?您希望得到什么输出?您尝试过调试吗?手的长度是5。您有
    和&j!=i
    ,但这总是会发生的,因为j=i+1和above@omajid“我”的价值观在递增之前保持相同的值两次。这是我不太理解的部分,需要帮助理解。谢谢。我正在尝试在修复for循环之前了解它是如何工作的,以达到所需的效果。对。for循环不运行1-2-1-2。在这种情况下,您的第一个for循环(外部循环)将运行5次。但每次运行时,第二个循环(内部循环)将运行5-(i+1)次。因此第一个循环将运行,其中i=0,内部循环将运行4次。然后第一个循环将再次运行,其中i=1。第二个循环将运行三次。等等。希望这有帮助。谢谢。在修复它之前,我正在试着了解for循环是如何工作的,以实现所需的。感谢您的指导。这让我在正确的轨道上,但为什么“我”不是递增的吗?它是根据每个j检查i。@mchlvnctry你是什么意思?你为什么说
    i
    没有递增?在两个for循环的第一次迭代之后,i不应该等于1,j不应该等于2吗?因为我仍然是0,而在4次迭代之后j是1、2和3。@mchlvnctry
    i
    将得到递增ted在循环的每次迭代之后,因此根据您放置
    println()
    的位置,它可能会将
    i
    打印为零。(因为打印行将在
    i
    递增之前发生)
    int numOfLoops = 0;
    for (int i = 0; i < hand.length-1; i++) {
        for (int j = i+1; j < hand.length; j++) {
            System.out.println(++numOfLoops);
    
            if (hand[i] == hand[j] && j != i) {
                counter++;
                System.out.println(counter);
            }
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    I=0,J=1, 2=2 counter = 1  
    I=0,J=2 2=2 counter = 2  
    I=0,J=3 2=2 counter = 3  
    I=0,J=4 2<>3 counter = 3 no print  
    I=1,J=2, 2=2 counter = 4  
    I=1,J=3, 2=2 counter = 5  
    I=1,J=4, 2<>3 counter = 5 no print  
    I=2,J=3, 2=2 counter = 6  
    I=3,J=4, 2<>3 counter = 6 no print