Почему цикл for выполняет 6 итераций? - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужна помощь в понимании логики того, почему цикл 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

Я вставил эту строку, System.out.println(counter), чтобы увидеть, сколько итераций выполняет цикл.

Вывод ниже:

Enter five ints.
Input 1: 2
Input 2: 2
Input 3: 2
Input 4: 2
Input 5: 3
1
2
3
4
5
6 

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Внешний цикл for (for(int i = 0; i < hand.length-1; i++) {) будет выполняться i-1 раз (при длине i).Затем внутренний цикл будет запускаться n-i на каждой итерации внешнего цикла for.Так что это работает намного больше, чем шесть раз.Причина, по которой он работает только шесть раз, состоит в том, что условие counter возникает только шесть раз.Если вы добавите 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);
        }
    }
}

Вывод: (Игнорируется вывод counter)

1
2
3
4
5
6
7
8
9
10
0 голосов
/ 14 сентября 2018
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
0 голосов
/ 14 сентября 2018

Достигается до шести, потому что для каждого значения i оно проходит через каждое значение j, которое больше, чем i.

Итак, шесть записей:

  1. i = 0, j = 1
  2. i = 0, j = 2
  3. i = 0, j = 3
  4. i = 1, j = 2
  5. i = 1, j = 3
  6. i = 2, j = 3

Полагаю, вам нужна дополнительная проверка, чтобы убедиться, что ни один матч не засчитан дважды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...